Command2.Enabled = True Datal.Recordset.Move Previous
If Not Pr2 Then Pr2 True: Commandl.Enabled = True Else Pri - False
Datal.Recordset.MoveNext Command2.Enabled = False End If End Sub
Private Sub Command3 Click(\
Datal.Recordset.Move First
Pr2 = True
Command2.Enabled False
Commandl.Enabled - True
Pri - False End Sub
Private Sub Command4 Click(
Datal.Recordset.MoveLast
Pri = True
Commandl.Enabled = False
Command2.Enabled = True
Pr2 - False End Sub
Private Sub Command5_ClickI
Datal.Recordset.Delete
Datal.Recordset.MoveNext End Sub Private Sub Command6_Click()
Datal.Recordset.Update End Sub
Private Sub Command7_CiicK ( i
Text4.SetFocus End Sub
Private Sub Form_Load()
Pr2 = True End Sub
Private Sub Text4_KeyPress(KeyAscil As Integer)
Dim FindCriteriy, Poisk As Variant
If KeyAscil = 13 Then
Poisk = Text4.Text
FindCriteriy = “Name =” & “’” & Poisk & “’”
Datal.Recordset.FindFirst FindCriteriy
If Datal.Recordset.NoMatch Then Text4.Text = “Такой записи нет”
End If
End If End Sub
Примеры работы с формой показаны на рис. 5.5 — 5.7. Обратите внимание, что
элемент Data на форме не виден. При попытке удаления записи с
использованием Delete срабатывает защита целостности базы данных (выдается
окно предупреждения на рис. 5.7). База данных включает три связанные
таблицы. Удаления записи из одной таблицы, на которую ссылается запись в
другой таблице, приводит к разрушению информации.
В рассмотренных выше примерах база данных, необходимые таблицы и поля
записей определялись на этапе разработки приложения. Однако Visual Basic
позволяет открывать при работе некоторого приложения любую существующую на
компьютере базу данных, определять состав ее таблиц и записей и выводить
для анализа всю таблицу или информацию из нее по запросу (такой способ
подключения к базе данных на этапе выполнения приложения называется
динамическим доступом).
[pic]
Для дальнейшего изложения рассмотрим еще одно понятие—наборы (collections)
Набор — это несколько связанных объектов, для которых определены общие
свойства. Общим для всех наборов является свойство Count, определяющее
число объектов в наборе (аналогично индексации элементов массива индексы
объектов в наборе имеют значения от о до Count — 1). Обращаться к элементам
набора можно или с использованием индекса или по именам.
Например,
Datal.Recordset.Fields(“Name”)
Data 1.Recordset.Fields(0)
В первом случае используется имя “Name” для обращения к нужному объекту
набора Fields. Во втором случае используется индекс для обращения к первому
элементу этого набора.
В приведенных примерах используется уже рассмотренный способ определения
свойств одного объекта через свойства другого (объект /.свойствоА.свойствоБ
— определяет свойствоБ некоторого объекта, адресуемое через свойствоА
объекта!).
Рассмотрим некоторые наборы, объекты набора и их свойства, которые
используются для анализа структуры базы данных, подключаемой к приложению
элементом управления Data, и выбора из нее информации.
Свойство Database возвращает ссылку на базу данных, определенную элементом
управления Data. Синтаксис:
Объект. Database.
Свойство Name возвращает имя объекта. Синтаксис:
Объект.^ате. Например, для используемого выше элемента управления Data с
именем Datal выражение Datal. Database. Name определит файл базы данных
C:\VB4\BIBLIO.MBD.
Свойство RecordCount возвращает число записей объекта RecordSet или
TableDef.
TableDefs определяет набор таблиц базы данных (объект TableDef является
одной присоединенной таблицей набора). Например, выражение
Datal.Database.TableDefs.Count определит число таблиц в базе данных.
Выражение Datal. Database.Table Defs(O). Name определит имя первой таблицы
в базе данных.
Fields определяет набор полей присоединенной таблицы базы данных (объект
Field является одним элементом (полем присоединенной таблицы) из набора
полей).
Выражение Datal.Database.TableDefs(0).Fields.Count определит число полей в
первой таблице базы данных.
Выражение Datal. Database. Table Defs(l).Fields(0). Name определит имя
первого поля второй таблицы присоединенной базы данных.
Выражение Datal. Recordset. RecordCount определит число записеи в текущем
множестве записей, к которому получен доступ.
Выражение Datal. Recordset. Fields.Count определит число полей множества
данных (текущее множество записей, к которому получен доступ).
Выражение Datal. Recordset. Fields(2). Name определит имя третьего поля на
множестве данных.
Выражение Datal. Recordset. Fields(2). Value определит значение третьего
поля на множестве данных.
Для отображения информации из присоединяемой на этапе выполнения базы
данных удобно использовать элемент управления Grid (Сетка). Сетка является
двумерной таблицей, позволяющей эквивалентно отображать таблицы реляционных
баз данных. Рассмотрим свойства сетки, необходимые для отображения таблиц
базы данных:
. Cols (Колонки) — число колонок в сетке.
. Rows (Строки) — число строк в сетке.
. GridLines — изображение линий сетки (True — линии сетки изображаются.
False — нет).
. GridLinesWidth — ширина сетки таблицы.
. Col, Row пределяет или устанавливает активную ячейку (номера колонки и
строки). Синтаксис: имя_сетки.Со\ [= номер], 11мя_сетки.Ро^/ [=
номер}. Доступны только на этапе выполнения.
. HighLight определяет подсветку выделенной ячейки сетки (True —
подсветка есть. False — нет).
. FixedCols (Фиксированные колонки) — количество фиксированных колонок
(отсчет от левого края) для отображения заголовков таблицы. Эти
колонки нельзя прокручивать и они выделяются серым фоном.
. FixedRows (Фиксированные строки) — количество фиксированных строк
(отсчет сверху вниз) для отображения заголовков. Эти строки нельзя
прокручивать и они выделяются серым фоном.
• • ScrolBars (Линейки прокрутки) — горизонтальная и вертикальная линейки
прокрутки для отображения невидимых колонок и строк. ScrolBars = 0 — нет
линеек прокрутки, 1 — горизонvbOFNPathMiistExist — возможность ввода только
существующего пути и др
Например, следующий оператор определяет возможность ввода только имени
существующего файла и существующего пути
чмя_станд _окна Flags = vbOFNFileMustExist Or \bOFNPathMustExist
Пример программы.
Приводится пример приложения, которое открывает существующую на компьютере
базу данных, выдает список таблиц базы данных и выводит выбранную
пользователем таблицу в сеточную форму Будет использоваться уже
рассмотренная выше база данных B1BLIO MDB Используются элементы управления
Data (имя — Datal), Gild (имя — Giidl, командная кнопка (имя — Commandl).
комбинированный список (имя — Combol) и Common Dialog (имя — CommonDialog)
Форма на этапе разработки имеет вид, показанный на рис 5 9
Рис 5 9
Алгоритм работы приложения следующий При щелчке мыши по командной кнопке
“Подключить”, появляется стандартное диалоговое окно для выбора файла базы
данных. После выбора файла базы данных программно формируется список таблиц
выбранной базы данных, который выводится в комбинированное окно После
выбора элемента списка (таблица базы данных) ч
нажатия клавиши “Ввод”, содержимое таблицы выводится на сетку Линейки
прокрутки сетки позволяют просматривать все поля сетки
Текст программ'
Option Explicit
Const vbOFNPAlhMUSTEXIST - &H800&
Const vbOFNFILEMUSTEXIST &H1000&
Private Sub Commandl_Click() Combol.Clear
CommonDiaiog.DefaultExt - “MDB” CommonDialog . FileName - “”
CommonDialog.Filter =
“Базы данных MS Access(*.MDB)I*.MDB” CommonDialoci. Flags
vbOFNPATHMUSTEXIST CommonDiaiog.Action - 1
If CommonDiaiog.FileName “” Then Exit Sub OpenDataBase
CommonDialog.FileName End Sub
Public Sub OpenDataBase(ByVal DataFile As String)
Dim I As Integer
Datal.Connect - “”
Datal. Dat-abaseName = DataFile
Datal.Refresh
For I = 1 To Datal.Database.TableDefs.Count - 1
Combol.Addltem Datal.Database.TableDefs(I).Name
Next
Combol.Text = “”
End Sub
Private Sub Combol Keypress(KeyAscii As Integer)
If KeyAscii = 13 Then FillGrid Combol.Text
Private Sub FillGrid^ByVal TableName As String) Dim I As Integer, CellWidth
As Integer Datal.RecordSource = TableName Gridl.Cols =
Datal.Database(TableName).Fields.Count
Gridl.Row = 0 For I =, 0 To Datal.Database(TableName).Fields.Count-1
Gridl.Col = I Gridl.Text = Datal.Database(TableName).Fields(I).Name
Gridl.ColWidth(I) = TextWidth(Gridi.Text) + 100 Next
Datdl.Refresh
Gridl.Rows = Datdl.Recordset.RecordCount + 1
Gridl.Row ^ 0
Do While Not Datdl.Recordset.EOF
Gridl.Row = Gridl.Row +• 1 For I = 0 To
Datal.Database(TableName).Fields.Count-1
Gridl.Col = I If IsNull(Datal.Recordset.Fields(I)-Value) Then
Gridl.Text = “” Else Gridl.Text - Datal.Recordset.Fields(I).Value
CellWidth = TextWidth(Gridi.Text) + 100
If CellWidth > Gridi.ColWidth(I) Then
Gridi.ColWidth(I) = CellWidth
End If Next I
Datal.Recordset.MoveNext Loop End Sub
Процедура Commandl_Click обеспечивает очистку комбинированного списка и
обращение к стандартному окну “Открыть файл” с заданным расширением (*.MDB)
(рис. 5.10). После выбора файла происходит обращение к процедуре Open
DataBase, в которую передается имя выбранного файла
(CommonDialog.FileName).
Процедура OpenDataBase обеспечивает подключение к базе данных через элемент
управления Data (по умолчанию оператором Datal.Connect = “” выбирается
Формат MS Access, имя базы данных определяется передаваемым в процедуру
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23