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