Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие СУБД 2011.pdf
Скачиваний:
68
Добавлен:
10.06.2015
Размер:
2.75 Mб
Скачать

77

Фильтрация набора данных

Фильтрация данных позволяет осуществлять отбор части записей по определённому критерию (критериям) описанным в свойстве:

property Filter: string;

Правила описания фильтра достаточно просты и похожи на синтаксис, используемый в языке SQL в предложении WHERE.

Далее приведём несколько примеров по синтаксису строки фильтра:

ADOTable1.Filter:=’Town=’+ QuotedStr(МОСКВА);

ADOTable1.Filter:=’Town<>’+ QuotedStr(МОСКВА);

ADOTable1.Filter:=’Price>1000 and Price<=2000’;

Для включения (отключения) фильтра необходимо установить в true (false) свойство:

property Filtered : Boolean;

Некоторые особенности в организацию фильтрации данных вносит свойство: property FilterOptions: TFilterOptions;

Значение foCaseInsensitive определяет чувствительность фильтра к регистру символов. Значение foNoPartialCompare разрешает отфильтровывать частичные совпадения.

ADOTable1.Filter:=’Town>’М*’’;

С процессом фильтрации связан специализированный обработчик события:

type TFilterRecordEvent = procedure(DataSet: TDataSet; var Accept: Boolean) of object;

property OnFilterRecord: TFilterRecordEvent;

В рамках указанного события программист получает возможность осуществить более тонкую настройку процесса фильтрации. Параметр DataSet возвращает ссылку на фильтруемый набор данных. С помощью переменной Accept управляется процесс отбора (фильтрации) записей: true – включать запись в результирующий набор, false – не включать.

procedure TForm1.ADOTable1FilterRecord(DataSet: TDataSet; var Accept: Boolean);

begin

{настраиваем фильтр на отбор записей на основе значения в поле Price, в результирующий набор будут включены записи >500 и меньше 1000} ACCEPT:=(DataSet['Price']>'500') and (DataSet['Price']<'1000');

end;

Обработчик события будет работать только в случае, если в true установлено свойство

Filtered.

Организация поиска данных

На уровне класса TDataSet реализован самый универсальный метод поиска Locate. Универсальность метода заключается в том, что он способен осуществлять поиск даже в неиндексированных полях.

function Locate(const KeyFields: String; const KeyValues: Variant; Options: TLocateOptions): Boolean;

Здесь: KeyFields – имя поля (или полей, разделённых точкой с запятой) в которых производится поиск. KeyValues – шаблон (или, когда поиск идёт в нескольких полях – массив шаблонов) по которым будет осуществлён поиск. Параметр Options : TLocateOptions передаётся в квадратных скобках, внутри скобок через запятую значения:

-loCaseInsensitive – поиск нечувствителен к регистру символов. -loPartialKey – допускается поиск по части ключа.

Также допускается оставлять скобки пустыми.

© 2011 г. Д.Л. Осипов