Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#7

AW: PrimärIndex wird nicht angelegt

  Alt 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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat