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

Dim  rs As Recordset,  db As  Database,  i  As Integer

Set  db = CurrentDB

Set   rs  = db.OpenRecordset("Города",   acOpenDynaset)

If  rs.RecordCount  <>  0  then

rs.MoveLast

rs.MoveFirst

For   i = 1  to  rs.RecordCount

'КОД   Обработки   записи                                                                 

rs.MoveNext

Next   i

End   If

Однако переход в конец набора имеет смысл использовать, только если объект Recordset содержат небольшое число записей. В противном случае этот процесс может продлиться достаточно долго.

Кроме того, при работе в многопользовательской среде удаление и добавление записей не отражается на значении свойства RecordCount объекта Recordset динамического типа. Чтобы оно возвращало точное значение, нужно выполнять повторный запрос с помощью метода Requery.

Иногда требуется определить позицию текущей записи в наборе. Для этого используются свойства AbsolutePosition и PercentPosition.

Свойство AbsolutePosition возвращает абсолютную позицию текущей записи. Оно может принимать значение от 1 до RecordCount.

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

Кроме того, можно использовать свойство AbsolutePosition, чтобы переместиться на конкретную запись в наборе.

Поиск записей

Методы поиска нужной записи в наборе зависят от типа набора записей. Для объектов Recordset типа Таблица используется метод Seek, для динамических и статических наборов — группа методов Find. В объекте Recordset типа статического набора с последовательным доступом поиск не поддерживается совсем (по крайней мере, для объекта DAO).

При использовании любого метода требуется указать критерий поиска нужной записи, однако метод Seek обеспечивает более высокую производительность, поскольку он использует индексы таблицы, на основе которой создан объект Recordset. Однако область применения этого метода ограничена:

·  в модели DAO его можно использовать только с объектами Recordset типа Таблица;

·  чтобы применить метод Seek в модели ADO, нужно создать объект Recordset со значением аргумента <параметры> равным adCmdTableDirect.

В том и в другом случае, если искомая запись найдена, она становится текущей. Если поиск не был успешным, в модели DAO текущая запись не определена, а в модели ADO указатель текущей записи помещается либо перед первой записью набора, либо после последней.

Теперь перейдем к рассмотрению методов поиска.

Циклы перебора записей в модели ADO организуются точно так же, по-другому создается только объект Recordset.

Применение методов Find

В объектной модели DAO определены четыре метода, относящиеся к группе Find:

·  FindFirst — ищется первая запись, удовлетворяющая заданным условиям;

·  FindLast — ищется последняя запись, удовлетворяющая заданным условиям;

·  Find Next — ищется следующая запись, удовлетворяющая заданным условиям;

·  FindPrevious — ищется предыдущая запись, удовлетворяющая заданным условиям.

Каждый из этих методов имеет всего один аргумент. Этот аргумент и задает условия поиска. Он представляет собой выражение, которое строится по правилам создания предложения WHERE в инструкции SQL.

Результат поиска отражается в значении свойства NoMatch объекта Recordset. При успешном завершении поиска свойство NoMatch имеет значение False, в противном случае — True. Поэтому после выполнения поиска нужно анализировать значение этого свойства.

Каждый из четырех методов Find начинает поиск с разных точек и в разных направлениях:

·  метод Find First ищет с начала набора к концу;

·  метод FindLast от конца к началу;

·  метод FindNext от текущей записи к концу;

·  метод FindPrevious от текущей позиции к началу.