Методы FindFirst, FindLast, FindNext, FindPrevious 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Методы FindFirst, FindLast, FindNext, FindPrevious



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

Синтаксис

НаборЗаписей.{FindFirst | FindLast | FindNext | FindPrevious} условия

НаборЗаписей – объектная переменная, представляющая существующий объект Recordset.

Условия – выражение или переменная типа String, используемая для поиска записи.

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

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

Начальная позиция и направление поиска для каждого из методов группы Find различны:

FindFirst От начала набора записей к концу набора записей.

FindLast От конца набора записей к началу набора записей.

FindNext От текущей записи к концу набора записей.

FindPrevious От текущей записи к началу набора записей.

При вызове метода FindLast ядро базы данных Microsoft Jet сначала полностью заполняет объект Recordset, а уже потом выполняет поиск.

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

При поиске в полях, содержащих даты, следует использовать американский формат даты (месяц-день-год) даже в случае работы с локализованной версией ядра базы данных Microsoft Jet; в противном случае искомая запись может быть не найдена. Перевести дату в нужный формат позволяет функция Format, например:

rstEmployees.FindFirst "ДатаНайма > #" & Format(mydate, 'm-d-yy') & "#"

Примечания.

Для обеспечения максимального быстродействия аргумент условия должен быть задан либо в виде "поле = значение", где поле является индексированным полем в базовой таблице, либо в виде "поле LIKE префикс", где поле является индексированным полем в базовой таблице, а префикс представляет начальную часть искомой строки (например, "ART*").

В общем случае, при прочих равных условиях метод Seek выполняется быстрее, чем методы Find. Если табличные объекты Recordset достаточны для решения задач пользователя, следует применять этот метод.

Методы MoveFirst, MoveLast, MoveNext, MovePrevious

Находят в указанном объекте Recordset первую, последнюю, следующую или предыдущую запись и делают эту запись текущей записью.

Синтаксис

НаборЗаписей.{MoveFirst | MoveLast [dbRunAsync] | MoveNext | MovePrevious}

НаборЗаписей – объектная переменная, задающая открытый объект Recordset.

Методы группы Move применяются для перехода от записи к записи без указания условия поиска записей.

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

При открытии объекта Recordset первая запись набора становится текущей, а свойство BOF получает значение False. Если объект Recordset не содержит ни одной записи, то свойство BOF получает значение True, а положение текущей записи становится неопределенным.

Если текущей записью является первая или последняя запись набора, то применение, соответственно, методов MoveFirst или MoveLast не изменяет положение текущей записи.

При вызове метода MovePrevious, когда текущей является первая запись набора, свойство BOF принимает значение True, а текущая запись становится неопределенной. При повторном вызове метода MovePrevious возникает ошибка; свойство BOF при этом сохраняет значение True.

При вызове метода MoveNext, когда текущей является последняя запись набора, свойство EOF принимает значение True, а текущая запись становится неопределенной. При повторном вызове метода MoveNext возникает ошибка; свойство EOF при этом сохраняет значение True.

Если аргумент НаборЗаписей указывает на объект Recordset типа таблицы (только в рабочей области ядра Microsoft Jet), то перемещение по записям производится в соответствии с текущим индексом таблицы. Текущий индекс задается с помощью свойства Index таблицы. Если текущий индекс не указан, то порядок записей при переходах становится неопределенным.

Допускается использование метода MoveLast для полного заполнения объектов Recordset типа динамического набора записей или статического набора записей с включением в объект Recordset текущего количества записей. Однако при таком вызове метода MoveLast скорость выполнения приложения может существенно уменьшиться. Рекомендуется вызывать метод MoveLast для подсчета записей только в том случае, когда требуется аккуратный подсчет числа записей в новом открытом объекте Recordset.

Не допускается вызов методов MoveFirst, MoveLast и MovePrevious для объектов Recordset типа статического набора записей с последовательным доступом.

Свойства BOF, EOF

Свойства BOF и EOF используют для проверки наличия записей в объекте Recordset, а также для сообщения о выходе за пределы объекта при перемещении от записи к записи. Возвращаемые значения свойств BOF и EOF определяются положением указателя текущей записи, имеют тип данных Boolean.

Свойство BOF возвращает значение True, если указатель текущей записи расположен перед первой записью набора записей, и значение False, если указатель текущей записи расположен на первой записи набора или на любой записи после нее.

Свойство EOF возвращает значение True, если указатель текущей записи расположен после последней записи набора, и значение False, если указатель текущей записи расположен на последней записи набора или на любой записи перед ней.

Дополнительные сведения

Если любое из свойств BOF или EOF имеет значение True, текущая запись не определена.

При открытии объекта Recordset, не содержащего ни одной записи, оба свойства BOF и EOF получают значение True, а свойство набора записей RecordCount (число записей) получает значение 0. При открытии объекта Recordset, который содержит хотя бы одну запись, первая запись набора становится текущей записью, а свойства BOF и EOF получают значения False. Данные свойства сохраняют значения False до тех пор, пока указатель текущей записи не переместится за пределы начала или конца набора записей при использовании, соответственно, методов MovePrevious или MoveNext, соответственно. После выхода за пределы набора записей текущая запись становится неопределенной.

После удаления последней оставшейся записи объекта Recordset свойства BOF и EOF могут сохранять значение False до тех пор, пока не будет предпринята попытка изменить положение указателя текущей записи.

При вызове метода MoveLast для объекта Recordset, содержащего записи, текущей записью становится последняя запись набора. Если после этого вызвать метод MoveNext, то текущая запись становится неопределенной, а свойство EOF получает значение True. Аналогично, при вызове метода MoveFirst для непустого объекта Recordset текущей записью становится первая запись набора. Последующий вызов метода MovePrevious приводит к тому, что текущая запись становится неопределенной, а свойство BOF получает значение True.

Как правило, при работе со всеми записями из объекта Recordset в программе задают перемещение в цикле по записям с помощью метода MoveNext до тех пор, пока свойство EOF не получит значение True.

Вызов метода MoveNext или MovePrevious, когда, соответственно, свойство EOF или BOF имеет значение True, приводит к возникновению ошибки.

В следующей таблице показано, какие из методов группы Move можно применять при различных комбинациях значений свойств BOF и EOF.

  MoveFirst MoveLast MovePrevious MoveNext
BOF=True, EOF=False Допускается Ошибка Ошибка Допускается
BOF=False, EOF=True Допускается Допускается Ошибка Ошибка
Оба = True Ошибка Ошибка Ошибка Ошибка
Оба = False Допускается Допускается Допускается Допускается

Допустимость применения метода из группы Move не означает, что метод обязательно обнаружит запись, но означает, что попытка выполнить указанный метод Move является допустимой и не приведет к ошибке. В результате вызова метода из группы Move состояние свойств BOF и EOF может измениться.

При вызове метода OpenRecordset неявно выполняется метод MoveFirst. Таким образом, в результате вызове метода OpenRecordset для пустого набора записей свойства BOF и EOF получают значение True.

Все методы группы Move, в которых успешно обнаруживается запись, задают для свойств BOF и EOF значение False.

Любой вызов метода Delete, даже приводящий к удалению последней записи из набора записей, не изменяет значения свойств BOF и EOF.

Свойство Bookmark

Свойство Bookmark используется в формах для установки закладки, однозначно определяющей запись в базовой таблице, запросе или инструкции SQL формы. Значение свойства Bookmark формы считывается или задается независимо от свойства объектов доступа к данным Bookmark базовой таблицы или запроса.

Свойство Bookmark содержит строковое выражение, создаваемое Microsoft Access.

Доступ к данному свойству осуществляется в макросе или программе Visual Basic.

Дополнительные сведения

При открытии формы, связанной с базовой таблицей, для каждой записи автоматически создается уникальная закладка. В программе Visual Basic имеется возможность сохранить закладку текущей записи, для чего следует присвоить строковой переменной значение свойства формы Bookmark. Чтобы вернуться на эту запись после переходов по записям формы, следует присвоить свойству Bookmark значение закладки, сохраненной в переменной. Для сравнения строковой переменной или переменной Variant с закладкой, а также при сравнении двух закладок, используется функция StrComp. Третий аргумент этой функции должен иметь нулевое значение.

Примечание. Закладки не сохраняются вместе с записями, которые они представляют, и существуют, только пока форма открыта. При каждом открытии формы, связанной с источником данных, закладки создаются заново.

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

Свойство Bookmark является доступным только для текущей записи формы. Для сохранения закладки, которая соответствует записи, не являющейся текущей, следует перейти к нужной записи, а затем присвоить текущее значение свойства Bookmark строковой переменной, предназначенной для хранения этой закладки.

После повторного выполнения базового запроса формы все сохраненные закладки перестают соответствовать конкретным записям. Однако обновление формы с помощью команды «Обновить» в меню «Записи» не влияет на закладки.

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

Значение свойства Bookmark не совпадает с номером записи.

 

Функция Dlookup

Возвращает значение конкретного поля в конкретном наборе записей. Используется для получения значения поля, даже когда это поле не принадлежит к базовому источнику записей формы.

Синтаксис

Dlookup (выражение, набор [, условие])

Здесь:

Выражение – имя поля в таблице или запросе, или элемент управления в форме (строка).

Набор – источник записей (имя таблицы или запроса),

Условие – условие отбора (строка), задает УСЛОВИЕ ОТБОРА для поиска записей, является эквивалентом предложения WHERE инструкции SQL без ключевого слова WHERE. Возвращает указатель на запись или Null, если запись не найдена.

Пример:

Dim X As Variant

X = Dlookup ("Слово", "Слова", "Номер = " & Me.Список1.Value)

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

Дополнительные сведения.

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

Следует задавать условия, обеспечивающие уникальность значения, возвращаемого функцией DLookup. Одним из способов решения этой задачи является использование значений ключевых полей, например, поля «КодСотрудника».

При любом использовании функции DLookup в макросе или в модуле, в выражении в запросе или в вычисляемом элементе управления необходимо обеспечить правильную запись условия. Функция DLookup может быть включена в строку «Условие отбора» бланка запроса, в выражение для вычисляемого поля, а также в строку условия обновления для запроса на обновление.

Допускается использование функции DLookup в вычисляемом элементе управления, когда поле, для которого проводится поиск значения, не принадлежит к базовому источнику записей формы.

Пусть в форме «Заказы» создано поле с именем «КодТовара», в котором выводится значение поля «КодТовара» из таблицы «Заказы», и требуется одновременно вывести значение поля «Марка» из таблицы «Товары», соответствующее выведенному коду. Для этого следует создать в форме другое поле и ввести для него следующее выражение в ячейку свойства «данные» (ControlSource).

=DLookup("[Марка]", "Товары", "[КодТовара] =" & Forms![Заказы]!КодТовара)

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

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

Sub Список7_AfterUpdate()

' Поиск записи, соответствующей этому элементу управления.

' Запрос "Переводы"

Me.RecordsetClone.FindFirst "[Английское_слово] = '" & Me![Список7] & "'"

Me.Bookmark = Me.RecordsetClone.Bookmark

Me.Поле11.ControlSource = "[Русское_слово]"

End Sub



Поделиться:


Последнее изменение этой страницы: 2016-08-12; просмотров: 290; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.208.172.3 (0.135 с.)