Работа с базами данных

В этой статье я рассмотрю работу с элементом Data, а также программное создание и редактирование баз данных.
Для примера воспользуемся базой данных, поставляемой с VB - Biblio.mdb. Поставьте на форму элемент Data. В свойстве Connect выберете Access. В свойстве DataBaseName нужно указать путь к базе данных. В свойстве RecordSource нужно указать название таблицы в базе данных. Выберите Authors. Первый этап закончен. Теперь надо выбрать контрол, который будет отображать содержимое базы данных. Поместите на форму текстовое окошко. В свойстве DataSourse укажите ссылку на элемент Data - выберите Data1. В свойстве DataField нужно указать колонку. Выберите Author. Теперь можете запустить программу. В текстовом окошке появиться первая строчка в указанной колонке. Если Вы внесете изменения в нее, то база данных автоматически обновится и будет содержать внесенное Вами значение. Преимущество такого подхода состоит в следующем. Когда база данных очень большая, то чтобы сохранить ее целиком понадобится определенное время. При таком же подходе изменения вносятся сразу. Чтобы перейти к следующей записи на элементе Data нужно нажать кнопку . Аналогично чтобы перейти к предыдущей записи нужно нажать на кнопку . Переход в начало и в конец колонки осуществляется кнопками . Теперь добавьте компонент Microsoft Data Bound Grid Control (файл DBGRID32.ocx). Поместите его на форму. В свойстве DataSource укажите Data1. Запустите программу. На экране отобразится вся таблица из базы данных. Вы можете ее редактировать. При этом изменения будут сразу вноситься в базу данных.
Теперь рассмотрим программное создание и редактирование баз данных. Для работы с базами данных требуется библиотека Microsoft DAO 3.5 Object Library. При добавлении элемента Data она автоматически подключается к проекту. Иначе ее нужно выбрать в Object Browser. Теперь добавьте компонент Microsoft FlexGrid Control. В свойствах укажите Cols=3 и Rows=10. Заполним ячейки сетки произвольными значениями (не считая фиксированной строки и колонки сетки) создадим базу данных и сохраним в ней значения сетки.
Dim i As Integer
Dim WorkSpace As WorkSpace
Dim DataBase As DataBase
Dim TableDef As TableDef
Dim Field1 As Field
Dim Field2 As Field
Dim Recordset As Recordset
' Запускаем генератор случайных чисел
Randomize Timer
' Заполняем сетку произвольными значениями
For i = 1 To 9
MSFlexGrid1.TextMatrix(i, 1) = Int(Rnd * 10)
MSFlexGrid1.TextMatrix(i, 2) = Int(Rnd * 10)
Next
Set WorkSpace = DBEngine.Workspaces(0)
' Создаем базу данных с названием TestDatabase.mdb
Set DataBase = WorkSpace.CreateDatabase("TestDatabase.mdb", dbLangGeneral)
' Создаем таблицу с названием TestTable
Set TableDef = DataBase.CreateTableDef("TestTable")
' Создаем 2 колонки с названиями Колонка_1 и Колонка_2
Set Field1 = TableDef.CreateField("Колонка_1", dbText)
Set Field2 = TableDef.CreateField("Колонка_2", dbText)
' Свойство AllowZeroLength = True позволяет
' вводить пустые строки
Field1.AllowZeroLength = True
Field2.AllowZeroLength = True
' Выбираем размер полей. Он определяет максимальное количество символов,
' которое может содержать ячейка
Field1.Size = 20
Field2.Size = 20
' Добавляем созданные колонки в таблицу
TableDef.Fields.Append Field1
TableDef.Fields.Append Field2
' Добавляем созданную таблицу в базу данных
DataBase.TableDefs.Append TableDef
' Открываем таблицу TestTable
Set Recordset = DataBase.OpenRecordset("TestTable")
For i = 1 To 9
' Добавляем новую строку
Recordset.AddNew
' Записываем в базу данных значения ячеек MSFlexGrid
Recordset(0) = MSFlexGrid1.TextMatrix(i, 1)
Recordset(1) = MSFlexGrid1.TextMatrix(i, 2)
' Аналогично можно было записать
' Recordset!Колонка_1 = MSFlexGrid1.TextMatrix(i, 1)
' Recordset!Колонка_2 = MSFlexGrid1.TextMatrix(i, 2)
' или
' Recordset.Fields(0) = MSFlexGrid1.TextMatrix(i, 1)
' Recordset.Fields(1) = MSFlexGrid1.TextMatrix(i, 2)
' или
' Recordset.Fields!Колонка_1 = MSFlexGrid1.TextMatrix(i, 1)
' Recordset.Fields!Колонка_2 = MSFlexGrid1.TextMatrix(i, 2)

' Обновляем запись
Recordset.Update
Next
' Закрываем базу данных
Recordset.Close
DataBase.Close
Теперь чтобы изменить значения в созданной базе данных введите следующий код
Dim i As Integer
Dim WorkSpace As WorkSpace
Dim DataBase As DataBase
Dim Recordset As Recordset
' Запускаем генератор случайных чисел
Randomize Timer
' Заполняем сетку произвольными значениями
For i = 1 To 9
MSFlexGrid1.TextMatrix(i, 1) = Int(Rnd * 10)
MSFlexGrid1.TextMatrix(i, 2) = Int(Rnd * 10)
Next
Set WorkSpace = DBEngine.Workspaces(0)
' Открываем базу данных TestDatabase.mdb
Set DataBase = WorkSpace.OpenDatabase("TestDatabase.mdb")
' Открываем таблицу TestTable
Set Recordset = DataBase.OpenRecordset("TestTable")
' Переходим к первой записи
Recordset.MoveFirst
For i = 1 To 9
Recordset.Edit
' Записываем в базу данных значения ячеек MSFlexGrid
Recordset(0) = MSFlexGrid1.TextMatrix(i, 1)
Recordset(1) = MSFlexGrid1.TextMatrix(i, 2)
' Обновляем запись
Recordset.Update
' Переходим к следующей записи
Recordset.MoveNext
Next
' Закрываем базу данных
Recordset.Close
DataBase.Close
Теперь считаем значения из базы данных
Dim i As Integer
Dim WorkSpace As WorkSpace
Dim DataBase As DataBase
Dim Recordset As Recordset
Set WorkSpace = DBEngine.Workspaces(0)
' Открываем базу данных TestDatabase.mdb
Set DataBase = WorkSpace.OpenDatabase("TestDatabase.mdb")
' Открываем таблицу TestTable
Set Recordset = DataBase.OpenRecordset("TestTable")
' Устанавливаем число колонок MSFlexGrid1
' в соответствии с числом строк в таблице
Recordset.MoveLast
MSFlexGrid1.Rows = Recordset.RecordCount + 1
' Записываем в первую строчку MSFlexGrid1 названия колонок таблицы
MSFlexGrid1.TextMatrix(0, 1) = Recordset.Fields(0).Name
MSFlexGrid1.TextMatrix(0, 2) = Recordset.Fields(1).Name
' Переходим к первой записи
Recordset.MoveFirst
For i = 1 To MSFlexGrid1.Rows - 1
' Записываем значения ячеек таблицы в MSFlexGrid1
MSFlexGrid1.TextMatrix(i, 1) = Recordset(0)
MSFlexGrid1.TextMatrix(i, 2) = Recordset(1)
' Переходим к следующей записи
Recordset.MoveNext
Next
' Закрываем базу данных
Recordset.Close
DataBase.Close
Hosted by uCoz