- •1. Специальные конструкции языка 6
- •Введение
- •Специальные конструкции языка
- •Пользовательские типы данных
- •Типизированные файлы
- •Текстовые файлы
- •Нетипизированные файлы
- •Обработка ошибок
- •Оператор On Error
- •Объект Err
- •Обработка событий мыши и клавиатуры
- •Обработка событий мыши
- •Обработка событий клавиатуры
- •1.5. Элемент управления MaskedEdit
- •Графика
- •Элементы управления для графических изображений
- •Генерация графических изображений (примитивов)
- •Графические методы
- •Координаты элементов управления.
- •Примеры использования графических методов
- •Задания для самостоятельной работы
- •Работа с таймером
- •Анимация графических изображений
- •Основные свойства и методы
- •Примеры создания эффектов анимации
- •Варианты заданий по анимации для самостоятельной работы
- •Стандартные диалоговые окна
- •Работа с базами данных в vb
- •Элемент управления Data
- •Объект Recordset
- •Элемент управления msFlexGrid
- •Элемент управления ms Data Bound Grid
- •Использование языка sql в vb для работы с базами данных
- •Литература
Объект Recordset
Как было сказано в разделе 7.1, свойство Recordset элемента Data, является объектом [1] с целым набором свойств и методов. Рассмотрим их.
Свойства объекта Recordset:
AbsolutePosition – содержит порядковый номер текущей записи в наборе данных (все записи нумеруются, начиная с 0).
RecordCount – содержит количество записей в наборе данных.
Например, выражение Data1.Recordset. RecordCount определит число записей в текущей таблице, к которой получен доступ.
BOF (Beginning Of File – признак начала набора данных).
EOF (End Of File – признак конца набора данных).
Свойство BOF равно True, если указатель текущей позиции в наборе данных расположен до первой записи. Свойство ЕOF равно True, если указатель текущей позиции в наборе данных расположен за существующими данными. Если любое из этих свойств равно True, то текущая запись имеет недопустимый номер. Если оба свойства равны True, то в наборе данных не содержится данных.
Методами объекта Recordset являются:
AddNew – переводит набор данных в состояние вставки новой записи;
Edit – переводит набор данных в состояние редактирования текущей записи;
Delete – удаляет текущую запись;
MoveFirst - переход на первую запись;
MoveLast - переход на последнюю запись;
MoveNext - переход на следующую запись;
MovePrevious - переход на предыдущую запись;
Update - запись в базу данных отредактированной записи;
FindFirst параметр - поиск первой записи для заданного условия поиска;
FindNext параметр - поиск следующей записи для заданного условия поиска;
FindLast параметр - поиск последней записи для заданного условия поиска;
FindPrevious параметр - поиск предыдущей записи для заданного условия поиска.
Последние четыре метода требуют задания параметра поиска записи. В общем случае параметром является строка символов, которая может включать логические выражения. Примеры условий поиска:
Dim Criteriy As String
Criteriy = "Поставщик = 'Меркурий' " ‘значение поля
«Поставщик» таблицы «Поставщики» должно быть равно
«Меркурий»
Criteriy = "Стоимость > 1000 And Стоимость < 2000 "
‘значение поля «Стоимость» таблицы «Товары на складе»
должно лежать в диапазоне от 1000 до 2000
Criteriy = "Название =" & "'" & Poisk & "'" ‘значение поля
«Название» таблицы «Товары на складе» должно быть
равно значению переменной Poisk
Следует обратить внимание на то, что задаваемое значение (строковая константа) в условиях заключается в апострофах (символ - '). В последнем примере эти апострофы специально задаются.
Как было сказано выше, ссылаться на свойства объекта Recordset, создаваемого элементом управления Data, можно только используя свойство Recordset самого элемента Data. Таким образом, при использовании перечисленных методов используется свойство Recordset элемента Data.
Например:
Data1.Recordset.MoveLast ‘перейти к предыдущей записи
Data1.Recordset.MoveNext ‘перейти к следующей записи
Data1.Recordset.FindFirst Criteriy ‘найти первую запись,
удовлетворяющую критерию поиска
При использовании методов поиска записей применяется также свойство NoMatch. Синтаксис использования свойства следующий:
Имя_Объекта.NoMatch
Свойство принимает значение True (требуемая запись не найдена) или False (требуемая запись найдена). Если поиск оказался безрезультатным, то свойство имеет значение True, и положение текущей записи (в момент применения одного из указанных выше методов поиска) не меняется.
Пример 7.2. Для иллюстрации методов объекта Recordset модифицируем приведенную в примере 7.1 форму, добавив в нее командные кнопки навигации и поиска и текстовую строку (рис. 7.4). Свойству Visible для элемента управления Data присвоим значение False (т.е. на этапе выполнения окно Data невидимо и его нельзя использовать для доступа к базе данных).
Функции движения по записям базы данных, действий с записями, поиска программируются процедурами обработки событий соответствующих командных кнопок.
Рис. 7.4 Форма с командными кнопками для навигации по БД
Значение для критерия поиска требуемой записи вводится в текстовом окне. Поиск выполняется по нажатию на командную кнопку «Поиск» или клавишу «Enter». Отрицательный результат поиска также выводится в этом текстовом окне. Поиск удачен при полном совпадении введенного значения и значения поля «Название». В процедурах используются выше рассмотренные свойства и методы. Обратите внимание, что элемент Data на форме не виден.
Ниже приведен исходный текст данной программы.
Option Explicit
Private Sub NextBtn_Click()
'Переход к следующей записи
PrevBtn.Enabled = True
FirstBtn.Enabled = True
Data1.Recordset.MoveNext
If Data1.Recordset.AbsolutePosition = _
Data1.Recordset.RecordCount - 1 Then
NextBtn.Enabled = False
LastBtn.Enabled = False
End If
End Sub
Private Sub PrevBtn_Click()
'Переход к предыдущей записи
NextBtn.Enabled = True
LastBtn.Enabled = True
Data1.Recordset.MovePrevious
If Data1.Recordset.AbsolutePosition = 0 Then
PrevBtn.Enabled = False
FirstBtn.Enabled = False
End If
End Sub
Private Sub FirstBtn_Click()
'Переход в начало БД
Data1.Recordset.MoveFirst
NextBtn.Enabled = True
LastBtn.Enabled = True
PrevBtn.Enabled = False
FirstBtn.Enabled = False
End Sub
Private Sub LastBtn_Click()
'Переход в конец БД
Data1.Recordset.MoveLast
NextBtn.Enabled = False
LastBtn.Enabled = False
PrevBtn.Enabled = True
FirstBtn.Enabled = True
End Sub
Private Sub DelBtn_Click()
'Удаление записи
Data1.Recordset.Delete
Data1.Refresh
NextBtn_Click
End Sub
Private Sub AddBtn_Click()
'Добавление записи
Data1.Recordset.AddNew
Data1.Recordset.Update
Data1.Refresh
Data1.Recordset.MoveLast
End Sub
Private Sub Form_Load()
'При загрузке формы выполняется эта процедура
PrevBtn.Enabled = False
FirstBtn.Enabled = False
End Sub
Private Sub FindBtn_Click()
'Нажатие на кнопку "Поиск"
FindEdt_KeyPress (13)
End Sub
Private Sub FindEdt_KeyPress(KeyAscii As Integer)
'При нажатии на клавиатуре символа, выполняется эта процедура
Dim FindCriteriy As String
If KeyAscii = 13 Then ' если нажали на "Enter", то выполнить
поиск
FindCriteriy = "Название =" & "'" & FindEdt.Text & "'"
Data1.Recordset.MoveFirst
Data1.Recordset.FindFirst FindCriteriy
If Data1.Recordset.NoMatch Then
FindEdt.Text = "Такой записи нет"
Else
NextBtn.Enabled = True
PrevBtn.Enabled = True
FirstBtn.Enabled = True
LastBtn.Enabled = True
If Data1.Recordset.AbsolutePosition = 0 Then
PrevBtn.Enabled = False
FirstBtn.Enabled = False
End If
If Data1.Recordset.AbsolutePosition = _
Data1.Recordset.RecordCount - 1 Then
NextBtn.Enabled = False
LastBtn.Enabled = False
End If
End If 'NoMatch
End If 'KeyAscii
End Sub
В рассмотренных примерах база данных, необходимые таблицы и поля записей определялись на этапе разработки приложения. Причем Visual Basic позволяет открывать при работе некоторого приложения любую существующую в компьютере базу данных, определять состав ее таблиц и записей и выводить для анализа всю таблицу или информацию из нее по запросу (такой способ подключения к базе данных на этапе выполнения приложения называется динамическим доступом).
Наборы
Для дальнейшего изложения рассмотрим еще одно понятие – наборы. Набор – это несколько связанных объектов, для которых определены общие свойства. Общим для всех наборов является свойство Count, определяющее число объектов в наборе (аналогично индексации элементов массива индексы объектов в наборе имеют значения от 0 до Count - 1). Обращаться к элементам набора можно или с использованием индекса, или по именам.
Например:
Data1.Recordset.Fields(«Name»)
Data1.Recordset.Fields(0)
В первом случае используется имя «Name» для обращения к нужному объекту набора Fields. Во втором случае применяется индекс для обращения к первому элементу этого набора.
В приведенных примерах используется уже рассмотренный способ определения свойств одного объекта через свойства другого (объект1.свойствоА.свойствоБ - определяет свойствоБ некоторого объекта, адресуемое через свойствоА объекта1).
Рассмотрим некоторые наборы, объекты набора и их свойства, которые используются для анализа структуры базы данных, подключаемой к приложению элементом управления Data, и выбора из нее информации.
Свойство Database возвращает ссылку на базу данных, определенную элементом управления Data. Синтаксис: Объект.Database.
Свойство Name возвращает имя объекта. Синтаксис: Объект.Name.
Например, для используемого выше элемента управления Data с именем Data1 выражение
Data1.Database.Name
определит файл базы данных.
Свойство TableDefs определяет набор таблиц базы данных (объект TableDef является одной присоединенной таблицей набора).
Например, выражение
Data1.Database.TableDefs.Count
определит число таблиц в базе данных.
Выражение
Data1.Database.TableDefs(0).Name
определит имя первой таблицы в базе данных.
Свойство Fields определяет набор полей присоединенной таблицы базы данных (объект Field является одним элементом - полем присоединенной таблицы из набора полей).
Выражение
Data1.Database.TableDefs(0).Fields.Count
определит число полей в первой таблице базы данных.
Выражение
Data1.Database.TableDefs(1).Fields(0).Name
определит имя первого поля второй таблицы присоединенной базы данных.
Выражение
Data1.Recordset.Fields.Count
определит число полей таблицы, к которой получен доступ.
Выражение
Data1.Recordset.Fields(2).Name
определит имя третьего поля текущей таблицы.
Выражение
Data1.Recordset.Fields(2).Value
определит значение третьего поля текущей записи на множестве данных.