Поиск по индексам

Для организации индексного поиска к набору данных должен быть подключен индекс (свойства IndexName ИЛИ IndexFieldNames).

Метод FindKey проводит поиск записи по заданным в параметре значениям ключевых полей текущего индекса набора данных. В случае успеха курсор набора данных устанавливается на найденной записи, а метод возвращает значение True, в противном случае — False.

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

Рассмотрим простейший пример, в котором реализован поиск по вторичному индексу в таблице CUSTOLY.DB демонстрационной базы данных DBDEMOS. Индекс основан на полях Last_Name И First_Name (рис. 14.3).

В компоненте таblе1, помимо стандартных настроек на таблицу, при помощи свойства IndexName задан и вторичный индекс (его имя Names). Значения для поиска задаются в компонентах Edit1 и Edit2.

Рис. 14.3. Главная форма проекта DemoFind

 Листинг 14.1. Секция Implementation главного модуля Main проекта DemoFind 

implementation 

{$R *.DFM}

procedure TForml.FormShow(Sender: TObject);

begin 

try

Cust.Open;

except

on E: EDBEngineError do ShowMessage('Ошибка при открытии таблицы');

end;

end;

procedure TForml.FormClose(Sender: TObject; var Action: TCloseAction);

begin

Gust.Close;

end;

procedure TForml.FindBtnClick(Sender: TObject);

begin

try 

if not Gust.FindKey([Editl.Text, Edit2.Text])

then ShowMessage('Запись не найдена');

except on E: EDatabaseError

do ShowMessage('Ошибка поиска'); 

end; 

end;

end.

Набор данных открывается в методе-обработчике FormShow при открытии формы и закрывается в методе-обработчике Formclose. При щелчке на кнопке FindBtn в метод FindKey передаются значения для поиска из компонентов Edit1 И Edit2.