Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1103588.rtf
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
10.86 Mб
Скачать

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

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

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

Рассмотрим средства, с помощью которых выполняется поиск записей в наборах данных Table и Query. Отметим, что к средствам поиска можно отнести также методы FindFirst, FindLast, FindNext и FindPrior — Переход на записи, удовлетворяющие условиям фильтра.

Поиск в наборах данных. Для поиска записей по полям в Delphi служат методы Locate и LookUp. Поля могут быть не индексированными.

Функция Locate (Const KeyFields: String; const KeyValues: Variant; Options: TLocateOption): Boolean ищет записи, содержащие заданные поля. Если записи, удовлетворяющие условиям поиска, существуют, то указатель текущей записи устанавливается на первую из них. Когда запись найдена, функция возвращает значение True, в противном случае — значение False.

KeyFields - список полей, по которым ведется поиск.

KeyValues - указывает значения полей для поиска.

Options - позволяет задать значения, которые обычно используются при поиске строк.

Метод LookUp, работает так же, как метод Locate. Функция LookUp (Const KeyFields: String; const KeyValues: Variant; const ResultField: String): Variant осуществляет поиск записи, удовлетворяющей определенным условиям, но, в отличие от метода Locate, не перемещает указатель текущей записи на найденную запись, а считывает информацию из полей записи. Еще одно отличие между этими двумя методами заключается в том, что метод LookUp осуществляет поиск, причем значения в полях записей (с учетом регистра) должны точно соответствовать значениям, заданным для поиска.

Параметры KeyFields и KeyValues имеют такое же назначение, как и в методе Locate, и используются аналогичным образом при поиске по одному или нескольким полям.

Для параметра ResultField через точку с запятой перечисляются названия полей, значения которых будут получены в случае успешного поиска.

Поиск по индексным полям. Для набора данных Table существуют методы, позволяющие вести поиск записей только по индексным полям. Перед вызовом любого из этих методов следует установить в качестве текущего индекс, построенный по полям, используемым для поиска. Методы поиска можно разделить на две группы, в первую из которых входят методы FindKey, SetKey, EditKey и GotoKey, предназначенные для поиска на точное соответствие, а другую группу — методы FindNearest, SetNearest, EditNearest И GotoNearest, допускающие частичное совпадение заданных для поиска значений и значений полей записей.

Метод FindKey (const KeyValues: array of const): Boolean выполняет поиск в наборе данных Table той записи, значения полей которой совпадают со значениями, указанными параметром KeyValues. Список полей для поиска не задается, а используются индексные поля в соответствии с текущим индексом. Если поиск завершился успешно, то найденная запись становится текущей, а метод возвращает значение True. При неудачном поиске указатель текущей записи не перемещается, а результатом метода будет значение False.

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

Вместо метода FindKey можно использовать методы SetKey, EditKey и GotoKey, которые применяются совместно. Их использование похоже на использование уже рассмотренных методов SetRangeStart, EditRangeStart и ApplyRange для фильтрации набора данных по диапазону значений.

Метод SetKey переводит набор данных в режим dsSetKey поиска записи. Этот метод вызывается один раз для текущего индекса. Впоследствии для перехода в режим поиска можно вызывать метод EditKey. Если набор данных находится в режиме поиска, значения полей устанавливаются с помощью операторов присваивания. Метод GotoKey: Boolean выполняет собственно поиск записи, удовлетворяющей заданному условию.

Метод FindNearest, в отличие от метода FindKey, производит поиск значений полей записей набора данных Table, которые частично совпадают со значениями, заданными для поиска. Частичное совпадение допускается для начала значения поля записи. Такой поиск можно применять к строкам и к данным другого типа, например, целочисленного. Поиск с помощью процедуры FindNearest (const KeyValues: array of const) Всегда является успешным и перемешает указатель текущей записи на запись, в наибольшей степени отвечающую условиям поиска.

Вместо метода FindNearest можно использовать комбинацию методов SetNearest, EditNearest И GotoNearest, работа с которыми аналогична работе с соответствующими методами поиска, требующими точного соответствия значений полей и значений, заданных для поиска.