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

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

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

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

Все множества FireDAC предлагают локально сортировать записи множества. До сортировки, FireDAC получает («фетчит») все записи из запрашиваемого множества. FireDAC строит список сортированных записей. Таким образом, для больших размеров множества — сортировка может быть долгой, но последующее перемещение по записям будет быстрым, поскольку все множество уже загружено.

Стандартная сортировка (Standard Sorting)

Чтобы отсортировать dataset по значениям поля, приложение использует свойство IndexFieldNames. Оно поддерживает множественные поля, чувствительность / нечувствительность к регистру, и сортировку по убыванию. Также, можно выбрать FormatOptions.SortOptions, чтобы настроить свойства сортировки. Далее в документации приводятся такие примеры

Также можно определить индексы в коллекции Indexes и использовать один из них таким образом.

 Представления множеств (Dataset Views)

FireDAC позволяет определять представления множеств, используя индексы. Следующие свойства TFDIndex контролируют представление.

Представление идентифицируется по свойству имени. Оно должно быть уникальным для множества.

Представление это список записей, поддерживаемых FireDAC, когда приложение получает или редактирует записи. Представления поддерживаются, когда свойства Active и IndexesActive установлены в True. Когда представление имеет свойства soUnique or soPrimary в Опциях, и приложение нуждается в усилении уникальности, можно установить свойство ConstraintsEnabled в True.

Когда представление выбрано, множество отражает список записей своего представления. Чтобы выбрать представление, нужно поставить свойство Selected в True или использовать свойство IndexName для имени представления. Далее в документации приводится такой пример

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

Некоторые навигационные опции, такие как Locate / Lookup / SetRange используют для оптимизации текущий порядок сортировки. Свойство Filter не использует представления, чтобы оптимизировать фильтрование.

Приложение может использовать поля fkInternalCalc и fkAggregate для сортировки. FireDAC не поддерживает сортировку по полям fkCalculated и fkLookup. Чтобы обойти это, можно создать поле fkInternalCalc, заполнить его событие OnCalcFields значениями fkCalculated или fkLookup, затем отсортировать по этому полю fkInternalCalc.

Чтобы отсортировать изначальное множество (так как оно было получено изначально), можно использовать знак ‘#’ как значение для свойств IndexFieldNames и Fields

 

TFDTable и сортировка (TFDTable and Sorting)

Сортировка компонента TFDTable подготавливается со стороны сервера (инструкцией ORDER BY). Заметьте, что FireDAC автоматически и прозрачно добавляет значения первичного ключа к порядку сортировки. Это необходимо для режима «Живого просмотра» LiveDataView. Подробнее об FDTable можно прочитать здесь.

The TFDTable sorting is performed at server side (ORDER BY). Note that FireDAC automatically and transparently adds primary key fields to the sorting order. This is required for proper live data window functionality.