Delphi. FireDAC. Автоинкрементные поля

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

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

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

FireDAC поддерживает вставку новой записи через автоинкрементную колонку и получение нового значения этой колонки. Этот механизм помогает немедленному обновлению, так же как для cached updates. В зависимости от DBMS автоинкрементные поля могут использоваться через специальную идентификационную колонку или через генератор и табличный триггер. Далее, в документации приводится такая таблица.

22

 

Автоматическое распознавание

FireDAC автоматически распознает колонку с автоинкрементом и определяет ее в dtIntXxx [caAutoInc, caReadOnly, caAllowNull]. Это помогает настройке TField

FireDAC автоматически распознает ограниченные множества автоинкрементных колонок FireBird  и устанавливает их в dtIntXxx, [caAutoInc, caAllowNull] когда

  • включен режим extended metadata ;
  • у таблицы есть BEFORE INSERT trigger;
  • триггер зависит от отдельной колонки и отдельного генератора. Эта колонка распознается как автоинкрементная.

Автоинкремент на клиенте 

По умолчанию FireDAC использует автоинкрементные поля на клиенте. После вызова методов Insert / Append, автоинкреметная колонка получит значение -1. С каждым следующим вызовом, значение получит ещё одно значение -1.

Когда UpdateOptions.RefreshMode <> rmManual, после «постинга» новой записи автоинкрементная колонка получит положительное значение.

Свойства TFDAutoIncField позволяют настроить автоинкремент на клиенте

Универсальная настройка 

Следующая настройка автоинкрементна будет работать с любой DBMS

-Когда  UpdateOptions.FetchGeneratorsPoint = gpNone

-Когда pfInUpdate это значение TField.ProviderFlags, автоинкремент исключается из INSERT / UPDATE выражений

-Когда FetchOptions.Items поставлены в fiMeta, колонка распознается как авто-инкрементная

Для Oracle,Firebird, IB необходимо вручную настраивать автоинкрементные колонки. Для DBMS, поддерживающих автоинкрементные поля никаких дополнительных действий не требуется.