Главная » Delphi » Фильтрация данных

0

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

Использование класса TDataset для фильтрации

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

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

2.  Установите свойство Filtered набора данных в состояние True.

На рис. 7.10 показана форма, содержащая объект TDBGrid, в котором отображены неотфильтрованные данные  таблицы CUSTOMER.

На первом этапе  создадим  обработчик события OnFilterRecord для этой таблицы. В данном  случае будут отбираться только  те записи, в которых значение поле  Company начинается с прописной буквы S. Код этой процедуры выглядит следующим образом:

procedure TForm1.Table1FilterRecord(DataSet: TDataSet;

var Accept: Boolean);

var

FieldVal: String;

begin

// Получить значения поля Company

FieldVal := DataSet[‘Company’];

// Принять запись, если поле начинается с буквы S

Accept := FieldVal[1] = ‘S';

end;

После  выполнения второго этапа  (установки свойства Filtered таблицы равным True) таблица примет вид, показанный на рис. 7.11. В сетке  отображаются только  те записи, которые удовлетворяют критерию фильтра.

НА ЗАМЕТКУ

Событие OnFilterRecord должно использоваться только в тех случаях, когда фильтр не может быть задан как значение свойства Filter. В последнем случае может быть достигнут значительный выигрыш в производительности. Например, при работе с ба- зой данных SQL компонент TTable будет передавать в базу данных содержимое свой- ства FILTER как условие выражения WHERE, которое обычно обрабатывается значи- тельно быстрее, — по сравнению с перебором всех записей, выполняемым в обработ- чике события OnFilterRecord.

Рис. 7.10. Неотфильтрованные  данные таблицы

CUSTOMER

Рис. 7.11. Отфильтрованные данные таблицы

CUSTOMER

Источник: Тейксейра, Стив, Пачеко, Ксавье.   Borland Delphi 6. Руководство разработчика. : Пер.  с англ. — М. : Издательский дом “Вильямс”, 2002. —  1120 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии