Иллюстрированный самоучитель по Delphi 7 для профессионалов

Поиск в диапазоне. Поиск по произвольным полям.

Индексный поиск можно организовать группой методов, подобно созданию диапазонов. Метод setKey переводит набор данных в состояние dsSetKey, затем должно следовать присваивание ключевым полям значений для поиска. Сам поиск осуществляется методом GotoKey:

with Tablel do begin
SetKey;
Fields[0].Value: = '428';
GotoKey; end;

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

Изменение параметров поиска осуществляется методом EditKey.

Поиск по произвольным полям

Для поиска по произвольной выборке полей можно использовать методы Locate и Lookup.

function Locate(const KeyFields: string; const KeyValues: Variant; Options; TLocateOptions)
: Boolean;
function Lookup(const KeyFields: string; const KeyValues: Variant; const ResultFields: string)
: Variant;

В метод Locate необходимо передать список полей, по которым будет идти поиск (параметр KeyFields, имена полей разделяются точкой с запятой), их требуемые значения (параметр KeyValues, значения разделяются запятой) и настройки поиска (параметр options). В настройках можно задать опцию loCaseinsensitive, которая отключает проверку на регистр символов, и опцию loPartiaiKey, которая включает поиск с минимальными отличиями. В случае успеха поиска курсор набора данных устанавливается на найденной записи, а метод возвращает значение True.

Tablel.Locate('Last__Name;First_Name', VarArrayOf(['Editl.Text', 'Edit2.Text']), []};

В метод Lookup передается список полей для поиска (параметр KeyFields, имена полей разделяются точкой с запятой) и их требуемые значения (параметр KeyValues, значения разделяются запятой). В случае успешного поиска функция возвращает массив значений типа вариант для полей, названия которых содержатся в параметре ResultFields.

Tablel.Lookup('Last_Name;First_Name',
VarArrayOf(['Editl.Text', 1Edit2.Text']), 'Last_Name;First_Name');

Оба эти метода автоматически используют быстрый индексный поиск в случае, если в параметре KeyFields задать поля индекса.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.