Методы элемента управления
Data
К встроенным функциональным возможностям элемента управления Data, которые действительно впечатляющи, можно обращаться из кода приложения, используя методы Data. Самые простые методы — это методы перемещения, соответствующие действиям четырех кнопок перемещения.
• MoveFirst. Перемещает элемент управления на первую запись.
• MoveLast. Перемещает элемент управления на последнюю запись.
• MovePrevious. Перемещает элемент управления на предыдущую запись.
• MoveNext. Перемещает элемент управления на следующую запись.
Эти методы используются для реализации кнопок перемещения. Однако, при этом, необходимо помнить о трех частных случаях: (1) когда Data позиционируется на первую или последнюю запись; (2) когда нажата кнопка Previous, в то время как Data находится на первой записи; (3) когда нажата кнопка Next, в то время как Data находится на последней записи.
VB6 в действии: проект Data2
Приложение Data2 подобно приложению Datal, но использует другую базу данных. База данных BIBLIO, поставляемая с Visual Basic, содержит названия книг, фамилии издателей и авторов. Структура этой базы показана далее в этой главе, а в этом приложении сформирован интерфейс для управления таблицей Titles, которая содержит поля Title (Название), ISBN (Издательский код), Description (Описание), Subject (Предмет), Comments (Примечания) и многое другое. Форма приложения Data2 изображена на рис. 17.5.
Рис. 17.5 Приложение Data2 методы Data для реализации кнопок прокрутки
Форма разрабатывается достаточно просто. Для этого выполните следующие действия:
1. Поместите элемент Data и соедините его с базой данных BIBLIO, задав в свойстве DatabaseName путь к базе данных в системе, а в свойстве RecordSource — таблицу Titles.
2. Разместите на форме элементы управления, связанные с данными, и подключите их к Data, установив в их свойствах DataSource значение Datal и в свойствах Datafield - отображаемые поля.
Программа для кнопок First и Last вызывает соответствующий метод перемещения.
Программа 17.1. Кнопки First и Last
Private Sub FirstBttn_Click ()
Data1.Recordset MoveFirst
End Sub
Private Sub LastBttn Click()
Data1.Recordset.MoveLast
End Sub
Код для двух других кнопок немного сложнее, поскольку он написан с учетом свойства
EOF элемента управления.
Программа 17.2. Обработка щелчка на кнопке Next
Private Sub NextBttn_Click()
Data1.Recordset.MoveNext
If Data1.Recordset.EOF Then
MsgBox "You are on the last record"
'(Вы находитесь на последней записи)
Data1.Recordset.MoveLast
End If
End Sub
Программа перемещается на следующую запись, а затем проверяет свойство EOF. Если EOF равно True, то элемент управления Data переместился на запись, расположенную за последней. Программа отображает сообщение, что достигнута последняя запись, и затем возвращается на нее.
Примечание
Переход на запись, находящуюся за последней, допустим. Это пустая запись, которую можно отредактировать и добавить к таблице. Проблема возникнет, если снова щелкнуть на кнопке Next. Попытка переместиться далее вызовет ошибку исполнения программы. Именно поэтому необходимо обработать эту ситуацию сразу, если выполняется условие EOF = True. Заметьте: когда отображается сообщение, поля пусты. Обычно необходимо выдавать сообщение при перемещении на последнюю запись. Данный же пример показывает, что после последней записи в RecordSet действительно имеется пустая запись.
Код для кнопки Previous такой же. Он вызывает метод MovePrevious, а вместо свойства EOF проверяет свойство BOF элемента управления Data.
Программа 17.3. Кнопка Previous
Private Sub PreviousBttn_Click()
Data1.Recordset.MovePrevious
If Data1.Recordset.BOF Then
MsgBox "You are on the first record"
'(Вы находитесь на первой записи)
Data1.Recordset.MoveFirst
End If
End Sub
Методы поиска записей
В дополнение к методам перемещения элемент управления Data предоставляет четыре метода для поиска записей в RecordSet. Одна из основных операций, которые выполняются над базами данных — нахождение требуемых записей. Следующие методы осуществляют нахождение записей, удовлетворяющих заданным критериям.
• FindFirst. Находит первую запись;
• FindLast. Находит последнюю запись;
• FindNext. Находит следующую запись;
• FindPrevious. Находит предыдущую запись.
Эти методы находят в RecordSet любую запись на основе критериев, заданных пользователем. Синтаксис всех этих методов одинаков.
RecordSet.FindFirst criteria
Параметр
criteria — строковое выражение, определяющее отношение между значениями полей и константами. Следующее выражение находит первую запись в RecordSet, поле State которой равно NY.
Datal.RecordSet.FindFirst "State = 'NY' "
Обратите внимание: строковая константа в строке критерия заключена в одинарные кавычки. Определенные пользователем критерии могут содержать несколько полей, логические операции и операции отношении. Следующий оператор находит первый счет, выданный в 1997 году, с общей стоимостью 1000 $ или более.
Datal.RecordSet.FindFirst "InvoiceDate > '12/31/1996'._
And Invoice >= 1000"
В дополнение к обычным операциям отношений можно использовать оператор LIKE, который позволяет находить записи, удовлетворяющие шаблону. Например, чтобы найти любую книгу в базе данных BIBLIO со словом SQL в заголовке, используйте следующий метод Find.
Recordset.FindFirst "Title LIKE '*SQL*' "
Строка *SQL* — это шаблон для нахождения любого количества символов до и после символов SQL. Другими словами, он соответствует заголовкам типа:
Введение в SQL, Овладение SQL-методами или SQL: Руководство пользователя.
Как работает метод Find
В данном случае поиск методом Find был выполнен без учета регистра. Таким образом, параметр *SQL* соответствовал SQL, sql и Sql. Для изменения заданного по умолчанию режима поиска на сравнение без учета регистра используйте следующий оператор:
Option Compare Text
Для сравнения с учетом регистра используйте другой оператор:
Option Compare Binary
Выражение Option Compare помещается в объявлениях форм или в модуле.
При вызове метода Find (Поиск) Visual Basic находит запись, соответствующую заданным критериям и устанавливает элемент Data на эту запись. В программе, однако, необходимо сначала проверить значение свойства NoMatch, которое устанавливается в False, если запись найдена, и в True — в противном случае. Следующий фрагмент программы показывает, как используются методы Find.
Data1.RecordSet.FindFirst "City= ' Berlin' "
If Data1.Recordset.NoMatch Then
MsgBox "No such record found"
' (Запись не найдена)
Else
MsgBox Datal.Recordset.Fields ("Country")
End If
Этот фрагмент кода находит первую запись, значение поля City которой равно Berlin. Если такой записи нет, то программа выводит соответствующее сообщение. Если запись найдена, то отображается значение поля Country (Страна).
VB6 в действии: проект FindDemo
Приложение FindDemo демонстрирует поиск записей в RecordSet с помощью метода Find. Эту небольшую утилиту можно использовать в ваших приложениях. Первый элемент управления ComboBox позволяет выбрать таблицу, а второй элемент ComboBox — поле. Затем в текстовом поле Search For можно ввести параметры для операции поиска и, нажимая кнопки, найти записи, удовлетворяющие заданным критериям. (Программа, позволяющая извлекать имена таблиц из базы данных NWIND и имена полей из выбранной таблицы, приведена в параграфе "Отображение баз данных" далее в этой главе.)
Рис. 17.6. Приложение FindDemo: использование методов Find
Как видно из рис. 17.6, можно определить дополнительные поля в параметре поиска, помимо выбранного в ComboBox. Любые строковые константы в поле Search For должны быть заключены в одинарные кавычки. В качестве альтернативы можно написать процедуру, которая заменяет двойные кавычки в строке одинарными..
Если запустить приложение FindDemo, то появятся столбцы, отличающиеся от показанных на рис. 17.6. Указатель мыши на разделительной линии между двумя столбцами связанного с данными элемента управления Grid (Сетка) превращается в двойную стрелку, указывая, что можно изменять размеры столбца. На рис. 17.6 некоторые столбцы с ненужными данными удалены (их ширина равна нулю), а размеры остальных столбцов изменены, чтобы отобразить данные, представляющие интерес (контактные имена и города).
Форма приложения FindDemo содержит связанный с данными элемент управления Grid и невидимый элемент управления Data. Элемент управления Grid рассмотрен далее в этой главе. Вы увидели, что он может быть связан с элементом Data и отображает содержимое RecordSet в табличном виде. Код, обеспечивающий заполнение данными обоих элементов управления ComboBox, приведен в параграфе "Доступ к. полям в объекте RecordSet" этой главы.
Программа 17.4. Кнопка Find First
Private Sub firstBttn_Click()
On Error GoTo SQLError
Data1.Recordset.FindFirst GenerateSQL()
If Data1.Recordset.NoMatch Then
MsgBox "No such record found"
'( He найдено ни одной записи)
End If
Exit Sub
SQLError:
MsgBox Err.Description
End Sub
Функция GenerateSQL(). Эта функция генерирует параметр поиска для всех операций Find. Значение, возвращаемое функцией GenerateSQL(), используется совместно методами Find. После вызова метода FindFirst программа проверяет свойство NoMatch. Если оно равно True, то программа выводит сообщение. Если запись, соответствующая критерию, найдена, то элемент управления Data автоматически устанавливается на эту запись.
Функция GenerateSQL() извлекает строку из текстового поля txtsearchValue, присоединяет ее к выбранному полю и возвращает строку, использующуюся как параметр метода Find. Большая часть кода приложения обрабатывает потенциальные ошибки. Основная работа выполняется функцией GenerateSQL(), которая формирует критерии поиска, как показано ниже.
Программа 17.5. Функция GenerateSQL()
Private Function GenerateSQL() As String
GenerateSQL = cmbFields.Text & " " & txtsearchValue
End Function