Создайте таблицу с полем автоматического ввода с помощью FireDAC TFDTable - PullRequest
0 голосов
/ 12 сентября 2018

Есть ли способ использовать метод 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 увеличивается автоматически, как и должно.

...