Поделиться через


Метод Recordset2.FindLast (DAO)

Область применения: Access 2013, Office 2013

Определяет положение последней записи в объекте Recordset типа dynaset или мгновенный снимок, которая отвечает заданным условиям и превращает запись в текущую запись (только для рабочих областей Microsoft Access).

Синтаксис

expression . FindLast(Criteria)

Выражение Переменная, представляющая объект Recordset2 .

Параметры

Имя

Обязательный/необязательный

Тип данных

Описание

Criteria

Обязательный

String

Строка, используемая для поиска записи. Аналогично предложению WHERE в инструкции SQL, но без слова WHERE.

Примечания

Если в поиск нужно включить все записи, а не только те, которые удовлетворяют заданному условию, используйте методы Move, чтобы переходить между записями. Для поиска записи в объекте Recordset табличного типа используется метод Seek.

Если соответствующая условиям запись не найдена, то указатель текущей записи неизвестен, а свойству NoMatch присваивается значение True. Если набор записей содержит несколько записей, удовлетворяющих условиям, FindFirst находит первое вхождение, FindNext находит следующее вхождение и т. д.

В приведенной ниже таблице показано, с какого расположения и в каком направлении выполняют поиск разные методы Find.

Метод Find

Начало поиска

Направление поиска

FindFirst

Начало набора записей

Конец набора записей

FindLast

Конец набора записей

Начало набора записей

FindNext

Текущая запись

Конец набора записей

FindPrevious

Текущая запись

Начало набора записей

При использовании метода FindLast ядро СУБД Microsoft Access полностью заполняет набор записей перед началом поиска, если этого еще не произошло.

Однако использование методов Find отличается от использования метода Move, который просто делает первую, последнюю, следующую или предыдущую запись текущей без указания условия. После операции Find можно выполнить операцию Move.

Всегда проверяйте значение свойства NoMatch, чтобы определить, успешно ли выполнена операция Find. Если поиск выполнен успешно, свойство NoMatch принимает значение False. Если поиск не дал результатов, то свойство NoMatch принимает значение True, а текущая запись не определяется. В этом случае необходимо вернуть указатель текущей записи к допустимой записи.

Использование методов Find с наборами записей, доступ к которым осуществляется через ODBC с подключением к ядру СУБД Microsoft Access, может быть неэффективным. Может оказаться, что изменение условий поиска определенной записи выполняется быстрее, особенно при работе с большими наборами записей.

При работе с базами данных ODBC, подключенными к ядру СУБД Microsoft Access, и большими объектами Recordset типа "Динамический набор" можно обнаружить, что использование методов Find или свойств Sort и Filter выполняется медленно. Чтобы повысить производительность, используйте запросы SQL с настроенными предложениями ORDER BY или WHERE, запросы параметров или объекты QueryDef, возвращающие определенные индексированные записи.

При поиске полей, содержащих даты, следует использовать формат даты, применяемый в США (месяц, день, год), даже если вы не используете версию ядра СУБД Microsoft Access для США. В противном случае данные могут быть не найдены. Используйте функцию Format в Visual Basic для преобразования даты. Например:

rstEmployees.FindFirst "HireDate > #" _ 
        & Format(mydate, 'm-d-yy' ) & "#" 

Примечание.

Если условие состоит из строки, объединенной с нецелочисленным значением, а параметры системы содержат десятичные символы, не используемые в США, например запятую (примеры: strSQL = "PRICE > " & lngPrice и lngPrice = 125,50), то при попытке вызова метода возникнет ошибка. Это возникает по причине того, что при объединении число будет преобразовано в строку с помощью используемого по умолчанию в вашей системе десятичного символа, а SQL Microsoft Access поддерживает только десятичные символы, используемые в США.

Примечание.

  • Для оптимальной производительности критерии* должны быть в форме "значениеполя = ", где поле является индексируемым полем в базовой базовой таблице, или "префиксlike", где поле является индексируемым полем в базовой базовой таблице, а префикс является строкой поиска префикса (например, "ART*").
  • Как правило, для эквивалентных типов поиска метод Seek обеспечивает более высокую производительность, чем метод Find. При этом предполагается, что для ваших потребностей будет достаточно объектов Recordset табличного типа.