Данная статья посвящена работе с таблицами в FireDAC. Компоненту TFDTable, который умеет отображать, фильтровать, сортировать и редактировать табличные данные. Основа для этой статьи – официальная документация.
Чтобы отображать базу данных, сортировать, фильтровать записи и редактировать данные, предназначен компонент TFDTable. Компонент генерирует инструкцию SELECT, основываясь на свойствах TFDTable и отправляет её в DBMS.
TFDTable имеет 2 главных режима
-Режим Live Data Window , который позволяет двунаправленную навигацию через большие объемы данных с минимальным использованием памяти.
-Стандартный режим. Этот режим похож на TFDQuery. FDTable генерирует простую инструкцию SELECT и использует результирующее множество, чтобы перемещаться по табличным записям
Чтобы открыть таблицу, свойство TFDTable.TableName должно быть прописано. Опционально свойства IndexFieldNames и IndexName могут быть указаны. Чтобы использовать IndexName fiMeta должно быть включено в FetchOptions.Items, например таким образом
1 2 3 |
FDTable1.TableName := 'CUSTOMERS'; FDTable1.IndexFieldNames := 'CustNo'; FDTable1.Open; |
Live Data Window Mode
В режиме LDW FireDAC запрашивает и хранит в памяти только число записей, равное 2 * FetchOptions.RowsetSize. Когда приложение просматривает табличные данные, FireDAC автоматически скролит или позиционирует LDW к необходимой позиции. Это позволяет получить следующие преимущества:
-Минимизация использования памяти и возможность работать с большими объемами данных, аналогично множествам с однонаправленными курсорами.
-Позволяет двунаправленное перемещение
-Дает постоянно свежие данные, снижая необходимость обновлять множество
-Не создает задержки при получении всех данных, необходимых для подготовки сортировки, поиска записи, перемещению к последней позиции и так далее.
Свойство Filter, диапазонное фильтрование, IndexFieldNames и IndexName, а также методы Locate и Lookup, установка RecNO, установка закладки и так далее, подготавливаются при помощи дополнительных команд SELECT или через установку дополнительных фраз для главной команды SELECT. После изменения этих свойств позиция курсора тоже меняется.
В режиме LDW свойство Filter работает как фраза WHERE из языка SQL.Чтобы сделать выражение совместимым с DBMS и local expression engine приложение может использовать FireDAC escape sequences, например
1 2 |
FDTable1.Filter := 'DateField = {d ' + FormatDateTime('yyy-mm-dd', Trunc(MonthCalendar1.Date)) + '}'; FDTable1.Filtered := True; |
LDW всегда добавляет фразу ORDER BY к командами SELECT. Ключевые требования к корректному режиму LDW это https://www.medicinaclinic.org/онкологический-центр-софия
-таблица должна иметь уникальный ключ. Unique Identifying Fields
-Серверная и клиентская коллации должны совпадать. (Подробнее о коллации)
Хотя FireDAC минимизирует число генерируемых и исполняемых SQL команд в LDW режиме. Он по прежнему загружает больше, чем FDQuery. Разработчикам нужно выбирать в зависимости от задачи.
Включение режима LDW
LDW режим работает автоматически, когда выполняются следующие условия:
- CachedUpdates is False by default.
- FetchOptions.Unidirectional is False by default.
- FetchOptions.CursorKind is set to ckAutomatic or ckDynamic (ckAutomatic is the default value).
- The table has primary or unique key.
В ином случае работает стандартный режим. Изменить режим можно только тогда, когда TFDTable в неактивном состоянии. В добавок, производительность может быть улучшена через изменение FetchOptions.LiveWindowParanoic (is False, by default) и FetchOptions.LiveWindowFastFirst (is False, by default).
В принципе, основные моменты по TFDTable мы просмотрели.