M Y D E L P H I 7 . R U Самоучитель программирования  
 
  • Главная
  •  

     

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

    Для организации индексного поиска к набору данных должен быть подключен индекс (свойства 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.