Visual Basic 6. Руководство разработчика

       

Методы элемента управления


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


Содержание раздела