Delphi. FireDAC. Фильтрование записей на клиенте

Данная статья посвящена фильтрованию записей на клиенте. Она основана на официальной документации

-Старая версия

-Новая версия

Все датасеты FireDAC позволяют фильтровать записи на клиенте. После применения фильтра FireDAC, не требует записей, он фильтрует записи в локальном кэше множества. FireDAC строит и предоставляет список отфильтрованных записей. Таким образом, на больших объемах, фильтрация может занять долгое время, но последующая навигация по такому множеству будет быстрой.

Стандартное фильтрование (Standard Filtering)

FireDAC обеспечивает некоторые опции для фильтрации, используя стандартный подход:

Свойство Filter позволяет выбрать условное выражение (conditional expression ) как строку. После выбора значения фильтра, установите значение Filtered в True, например

Обработчик OnFilterRecord позволяет Вам применять фильтрацию как Delphi code. После определения обработчика, установите свойство Filtered в True, чтобы активировать фильтр. Например:

Фильтрация по диапазону значений (Filtering by Range of Values)

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

Следующие методы контролируют фильтрацию:

  • SetRangeStart — приводит множество в состояние, которое позволяет установить минимальное значение диапазона и удаляет предыдущие значения.
  • EditRangeStart — приводит множество в состояние, которое позволяет установить минимальное значение диапазона, сохраняя предыдущие значения.
  • SetRangeEnd — приводит множество в состояние, которое позволяет получить максимальное значение и удаляет предыдущие значения.
  • EditRangeEnd — приводит множество в состояние, которое позволяет установить максимальное значение диапазона и сохраняет предыдущие значения.
  • ApplyRange — активирует фильтрацию по диапазону после определения минимального и максимального значений.
  • SetRange — комбинирует SetRangeStart, SetRangeEnd, и ApplyRange в единый метод.
  • CancelRange — выходит из режима фильтрации по диапазону

Следующие свойства контролируют фильтрацию

  • IsRanged — позволяет получить текущее значение режима фильтрации
  • KeyExclusive — получает или устанавливает включение минимума и максимума во множество
  • KeyFieldCount — получает или устанавливает число индексных полей, чтобы использовать фильтрацию по диапазону.

Пример

Фильтрация по статусу записи (Filtering by Record Status)

Свойство FilterChanges позволяет фильтровать записи, зависящие от их статуса. Этот тип фильтрования может быть использован только в режиме Cached Updates. Например, чтобы показать только модифицированные или удаленные записи, используйте следующее

Другие опции (Other Options)

Есть другие опции, которые позволяют лимитировать видимые записи, такие как

Использование master-detail datasets relation

Комбинированные сортировка и фильтрация через local dataset indexes.

Также, учтите, что FireDAC не поддерживает фильтрацию по полям fkCalculated и fkLookup. Вместо этого приложение использует fkInternalCalc и fkAggregate поля для фильтрации

TFDTable и Фильтрация

TFDTable в режиме live data window mode использует серверное фильтрование (WHERE) в следующих случаях

При обработке OnFilterRecord  и при использовании свойства FilterChanges. Также в официальной документации дана некоторая дополнительная информация на эту тему.

This entry was posted in Delphi, FireDAC. Bookmark the permalink.