Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
Delphi 12 Athens
|
AW: PrimärIndex wird nicht angelegt
22. Feb 2023, 12:59
Ich benutze z.B. folgende Methode zum Anlegen von Tables in Delphi mit SQLite. Der Primary Key wird dabei für alle Tables identisch angelegt.
Delphi-Quellcode:
procedure TdmCreateDB.InternalCreateDataSet(const AName: string; AddFields: TProc<TFieldDefs>; AddIndices: TProc<TAddIndicesProc>);
var
tbl: TFDTable;
begin
tbl := TFDTable.Create(nil);
try
tbl.Connection := Connection;
tbl.TableName := AName;
tbl.UpdateOptions.GeneratorName := 'GEN_' + AName.ToUpperInvariant;
tbl.FieldDefs.Add('ID', ftAutoInc);
AddFields(tbl.FieldDefs);
tbl.IndexDefs.Add('PK_' + AName.ToUpperInvariant, 'ID', [ixPrimary]);
if Assigned(AddIndices) then begin
AddIndices(
procedure(AName, AFields: string; AOptions: TIndexOptions)
begin
tbl.IndexDefs.Add('IX_' + tbl.TableName + '_' + AName, AFields, AOptions);
end);
end;
tbl.CreateTable(tbl.Exists);
finally
tbl.Free;
end;
end;
Ein Aufruf sieht dann in etwa so aus:
Delphi-Quellcode:
InternalCreateDataSet('ZUGHH',
procedure(FieldDefs: TFieldDefs)
begin
FieldDefs.Add('TANK', ftSmallInt, 0, False);
FieldDefs.Add('SORTE', ftString, 4, False);
FieldDefs.Add('SERIE', ftFloat, 0, False);
FieldDefs.Add('INHALT', ftSmallInt, 0, False);
FieldDefs.Add('BEMERKUNG', ftString, 12, False);
FieldDefs.Add('DATUM', ftDate, 0, False);
end,
procedure(AddIndex: TAddIndicesProc)
begin
AddIndex('I_SERIE', 'SERIE', []);
end);
Ich habe aber leider auch keine Idee, warum es bei dir nicht klappt.
|
|
Zitat
|