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

    Поиск данных. Поиск по индексам.

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


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

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

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

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

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

    Иллюстрированный самоучитель по Delphi 7 для профессионалов › Механизмы управления данными › Поиск данных. Поиск по индексам.
    Рис. 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.

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