Смекни!
smekni.com

Програмирование на Visual Basic (стр. 27 из 30)

Используем элемент управления Data для доступа к этой базе данных. Создадим форму (рис. 5.1) с элементом управления Data, с тремя метками и с тремя текстовыми окнами для вывода соответствующей информации из базы данных B1BLIO.MDB. Свойствам объекта Data присваиваются следующие значения:

DataBaseName = C:\VB4\BIBLIO.MBD

RecordSourse = Pablishers

Connect = Access.

Для подключения базы данных (задание значения свойства DataBaseName = C:\VB4\BIBLIO.MBD) используется специальное окно (рис. 5.2).

Свойствам объекта Textl (текстовое окно с заголовком “Издательство”) присваиваются значения:

DataSourse = Datal (имя элемента Data — Datal), DataField = Name (Name — имя поля таблицы издательств). *

Рис. 5.

Свойствам объекта Text2 (текстовое окно с заголовком “Город”) присваиваются значения: DataSourse = Datal (имя элемента Data — Datal), DataField = City ( City — имя поля таблицы издательств).

Свойствам объекта Text3 (текстовое окно с заголовком “Телефон”) присваиваются значения: DataSourse = Datal (имя элемента Data — Datal), DataField = Telephone (Telephone — имя поля таблицы издательств).

Созданное приложение позволяет просматривать базу данных, получая из нее указанную информацию. Элемент управления Data обеспечивает движение по записям (последовательное Движение к последующей записи или к предыдущей записи при щелчке мышью по правой или левой стрелке объекта и переход “ первой или последней записи при щелчке мыши по левой или правой кнопке окна) (рис. 5.3).

Аналогичные действия можно проделать без использования мыши, а программно. Для этого применяются методы объекта Data.

phl 5 2

Такгцуж методам являются:

  • Refresh — открытие и закрытие базы данных;
  • MoveFirst — текущей становится первая запись из множества записей:
  • MoveNext — текущей становится следующая запись из множества записей;

Рис 53

  • Move Previous — текущей становится предыдущая запись из множества записей;
  • MoveLast — текущей становится последняя запись из множества записей;
  • Update — редактированное поле записывается в базу данных ( этот можно применять только для таблиц и динамических множеств);
  • FindFirst найти первую запись для заданного условия поиска;
  • FindNext найти следующую запись для заданного усло-„ия поиска:
  • FindLast найти последнюю запись для заданного условия

поиска;

    FindPrevious найти предыдущую запись для заданного условия поиска.

Последние четыре метода требуют задания критерия поиска записи. В общем случае критерием является строка символов, которая может включать логические выражения. Переменной типа строки символов, являющейся критерием, присваивается значение Следующие примеры показывают задание критериев:

Dim Criteriy As String

Criterly = “State = ' NY ' “ ' значение поля State (Штат) таблицы должно быть равно NY Criteriy = “Title > ‘A’ And Title < 'В' “ ' первой буквой поля Title таблицы должна быть буква А Criteriy = “Name =” & “'” & Poisk & “'” ' значение поля Name таблицы должно быть равно значению переменной Poisk

Следует обратить внимание на то, что задаваемое значение в условиях берется в апострофы “ символ — '”. В последнем примере эти апострофы специально задаются.

При использовании методов для поиска записей используется также свойство NoMath, применяемое для таких объектов, как таблица, динамическое множество, кадр или Recordset. Синтаксис использования свойства следующий:

Объект. NoMath

Свойство принимает значение True (требуемая запись не найдена) или False (требуемая запись найдена). Если поиск оказался безрезультатным, то свойство имеет значение True и положение текущей записи (в момент применения одного из указанных выше методов поиска) не меняется.

Как было сказано выше, ссылаться на свойства объекта Recordset, создаваемого элементом управления Data, можно только используя свойство Recordset самого элемента Data (синтаксис см. выше). Таким образом, при использовании перечисленных методов вставляется свойство Recoidset элемента Data. Например,

Datal.Recordset.MoveLast Datal.Recordset.MoveNext Datal.Recordset.FindFirst FindCriterly

Пример программы.

Модифицируем приведенную выше форму, добавив командные кнопки и текстовую строку (рис 5 4) Свойству Visible для элемента управления Data присвоим значение False (т е на этапе выполнения окно Data не видимо и его нельзя использовать для диалогового доступа к базе данных) Функции движения по записям базы данных, действии с записями, поиска программируются процедурами обработки событии соответствующих командных кнопок Критерии поиска требуемой записи вводится в текстовом окне, которое активизируется командной кнопкой “Поиск” (отрицательный результат поиска также выводится в этом текстовом окне). В процедурах используются выше рассмотренные свойства и методы

Процедуры обработки событий-

Option Explicit Dim Pri, Pr2 As Boolean

Private Sub Commandl Click()

If Not Datal.Recordset.EOF Then Pr2 = True

Commandl.Enabled = True Datal.Recordset.MoveNext

If Not Pri Then Pri = True: Command2.Enabled = True Else Pr2 = False

Datal.Recordset.Move Previous Commandl.Enabled = False End If End Sub

Private Sub Command2_Ciick() If Not Datal.Recordset.BOF Then Pri - True 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(&bsol;

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()

Pri = True

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 позволяет открывать при работе некоторого приложения любую существующую на компьютере базу данных, определять состав ее таблиц и записей и выводить для анализа всю таблицу или информацию из нее по запросу (такой способ подключения к базе данных на этапе выполнения приложения называется динамическим доступом).

Для дальнейшего изложения рассмотрим еще одно понятие—наборы (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:&bsol;VB4&bsol;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 (Сетка). Сетка является двумерной таблицей, позволяющей эквивалентно отображать таблицы реляционных баз данных. Рассмотрим свойства сетки, необходимые для отображения таблиц базы данных: