Есть ли способ использовать метод TFDTable.CreateTable в Delphi для автоматического создания триггера и генератора для поля автоматического ввода?
Используя это как пример
Создать таблицу с Firedac без SQL Script
Я пробовал следующее:
Table := TFDTable.Create(nil);
try
Table.Connection := MyConnection;
Table.TableName := 'Vehicles';
Table.FieldDefs.Add('VehIdx', ftAutoInc, 0, True);
Table.FieldDefs.Add('PIN', ftString, 15, False);
Table.FieldDefs.Add('VehID', ftString, 15, False);
Table.FieldDefs.Add('VehName', ftString, 50, False);
Table.AddIndex('pkVehiclesIdx', 'VehIdx', '', [soPrimary]);
Table.CreateTable(True);
finally
Table.Free;
end;
Но я получаю "Генератор GEN_VEHICLES не найден".
Я использую Firebird.
Я знаю, что могу сам создать триггер и генератор. Но похоже, что FireDAC должен уметь это делать. Мне интересно, как заставить это сделать это?
Хорошо, я узнал, как это сделать. Вот полный код:
procedure CreateVehiclesTable;
var
Table: TFDTable;
begin
Table := TFDTable.Create(nil);
try
Table.Connection := FrmMain.ConLocal;
Table.TableName := 'Vehicles';
Table.FieldDefs.Add('VehIdx', ftAutoInc, 0, False);
Table.FieldDefs.Add('PIN', ftString, 15, False);
Table.FieldDefs.Add('VehID', ftString, 15, False);
Table.FieldDefs.Add('VehName', ftString, 50, False);
Table.OptionsIntf.UpdateOptions.GeneratorName := 'GEN_VEHICLES';
Table.AddIndex('pkVehiclesIdx', 'VehIdx', '', [soPrimary]);
Table.CreateTable(False, [tpTable, tpPrimaryKey, tpGenerators, tpTriggers]);
finally
Table.Free;
end;
Ручная установка имени генератора заставляет все работать правильно. Триггер и генератор создаются, и поле VEHIDX увеличивается автоматически, как и должно.