Программирование в ACCESS 2000, страница 20

End Function

ПрименениеметодаSeek

Метод Seek, как уже говорилось, используется для объектов Recordset табличного типа. Он выполняет поиск нужной записи с использованием индексов. Поэтому перед выполнением поиска следует указать индекс, который нужно использовать (текущий индекс). Синтаксис метода для объектной модели DАО:

<тaблицa>.Seek <сравнение>, <ключ!>, <ключ2>...<ключ!3>.

Аргумент <сравнение> представляет собой один из операторов сравнения: равно (=), больше (>), не меньше (>=), меньше (<), не больше (<=). Аргументы <ключ1>, <ключ2>...<ключ3> — это значения, которые нужно найти. Количество аргументов определяется количеством полей в индексе. Их порядок должен совпадать с порядком, в котором расположены соответствующие поля в индексе.

Еще раз напомним, что этот метод можно применять только к локальным таблицам. Кроме того, он позволяет найти только первую запись, удовлетворяющую заданному критерию, даже если таких записей в наборе несколько. Поэтому его обычно используют для быстрого поиска записи по ключу.

В листинге 5.35 представлена процедура, которая ищет автора в таблице Авторы по его коду. Поэтому нужно установить соединение с базой данных Библиотека, mdb, что мы и делаем в примере.

Листинг 5.35. Процедура поиска автора (ОАО)

Private Authorld As  Long

Private  Sub  SeekEmployee()

Dim db As  Database,  rs As  Recordset

'   открываем базу данных

Set db = OpenDatabase("C: \Библиотека.mdb")

Set rs = db.OperrRecqrdset("Авторы", dbOpenTable)

rs.Index = "PrimaryKey"

rs.Seek "=", Authorld

If rs.NoMatch Then

MsgBox "Искомый автор не найден"                                     

Exit Sub

Else

‘ код обработки данных об авторе

End If

rs.close

db.close

End Sub

В модели ADO метод Seek тоже имеет ограниченное применение — он может применяться только к объекту Recordset, который был создан путем прямого доступа к таблице. Это означает следующее. Обычно объект Recordset создается путем выполнения запроса на выборку, и даже если в качестве параметра Source передается имя таблицы, все равно создается и передается провайдеру OLE DB на выполнение запрос, выбирающий все данные из таблицы. Чтобы это обойти нужно в качестве значения параметра Options метода Open объекта Recordset передать константу adCmdTableDirect1. Кроме того, метод Seek не может применяться, если свойство CursorLocation объекта Recordset имеет значение adUseClient, тс есть используется клиентский курсор.

Синтаксис метода Seek в модели ADO имеет следующий вид: <recordset>.Seek <KeyValues>, <SeekOption>.

Первый аргумент, <KeyValues>, представляет собой массив значений полей индекса а второй, <SeekOption>, — тип сравнения, причем в данном случае тип сравнения определяется константой. Перечень возможных констант приведен в табл. 5.4

Таблица 5.4. Значения аргумента SeekOption метода Seek

Константа

Описание

adSeekAfterEQ

Ищется ключ, равный KeyValues, или первый ключ, больший не*>

adSeekAfter

Ищется первый ключ, больший заданного KeyValues

adSeekBeforeEQ

Ищется ключ, равный KeyValues, или первый ключ, меньший него

adSeekBefore

Ищется первый ключ, меньший заданного KeyValues

adSeekFirstEQ

Ищется первый ключ, равный KeyValues

adSeekLastEQ

Ищется последний ключ, равный KeyValues

Это позволяют не все провайдеры, но провайдеры Microsoft Jet OLE DB.4.0 и SQL Server позволяют