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

Фильтрация

Помимо обычной фильтрации, основанной на свойствах Filter, Filtered и методе-обработчике onFilterRecord, класс TCustomADODataSet предоставляет разработчику дополнительные возможности.

Свойство:

TFilterGroup = (fgUnassigned, fgNone, fgPendingRecords, fgAffectedRecords,
 fgFetchedRecords, fgPredicate, fgConflictingRecords);
property FilterGroup: TFilterGroup;

…задает групповой фильтр для записей, основываясь на информации о состоянии каждой записи набора данных, подобно рассмотренному выше свойству RecordStatus.

Фильтрация возможна по следующим параметрам:

  • fgUnassigned – фильтр не задан;
  • fgNone – все ограничения, заданные фильтром, снимаются, отображаются все записи набора данных;
  • fgPendingRecords – отображаются измененные записи, несохраненные в хранилище данных при вызове метода updateBatch или cancelBatch;
  • fgAffectedRecords – показываются записи, обработанные при последнем сохранении в хранилище данных;
  • fgFetchedRecords – имеем записи, полученные при последнем обновлении из источника данных;
  • fgPredicate – видны только удаленные записи;
  • fgConfiictingRecords – отображаются модифицированные записи, при сохранении которых в хранилище данных возникла ошибка.

Для того чтобы групповая фильтрация заработала, необходимы два дополнительных условия. Во-первых, фильтрация должна быть включена – свойство Filtered должно иметь Значение True.

Во-вторых, свойство LockType должно иметь значение ItBatchOptimistic.

with ADODataSet do begin
Close;
LockType: = ItbatchOptimistic;
Filtered: = True;
FilterGroup: = fgFetchedRecords;
Open;
end;

Метод:

procedure FilterOnBookmarks(Bookmarks: array of const);

…включает фильтрацию по существующим закладкам. Для этого предварительно необходимо при помощи метода GetBookmark установить закладки на интересующих записях. При вызове метода FilterOnBookmarks автоматически очищается свойство Filter, а свойству FilterGroup присваивается значение gUnassigned.

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