![]() |
Datenbank: sqLite • Version: 3.29.0 • Zugriff über: Firedac
PrimärIndex wird nicht angelegt
Liste der Anhänge anzeigen (Anzahl: 1)
.. wenn ich mit folgendem Code eine Tabelle erstelle,
wird das Feld "row1" angelegt. Mit addIndex sollte eigentlich auch ein Primarykey angelegt werden - was aber nicht passiert.
Delphi-Quellcode:
Jemand ein Idee, was ich übersehen haben könnte?
procedure TForm1.createTable;
var table: TFDTable; begin table := TFDTable.Create(nil); try table.Connection := fDbConnection; table.TableName := 'tab1'; table.FieldDefs.add('row1', ftInteger, 0, false); table.AddIndex('pkRow1', 'row1', '', [soPrimary]); table.CreateTable(false); finally table.Free; end; end Grüße Klaus |
AW: PrimärIndex wird nicht angelegt
Muss eine Column für den Primary key nicht Required sein?
|
AW: PrimärIndex wird nicht angelegt
@Uwe: Required ist es ja, siehe NOT NULL.
Enthält ein PK nicht eh implizit einen Index und das Required (NOT NULL) ? Aber trotz des soPrimary ist ja Primary=0, wobei das NotNull=1 schonmal stimmt. |
AW: PrimärIndex wird nicht angelegt
Hallo Uwe,
danke - auch dann wird leider kein PrimaryKey angelegt.
Delphi-Quellcode:
procedure TForm1.createTable;
var table: TFDTable; begin table := TFDTable.Create(nil); try table.Connection := fDbConnection; table.TableName := 'tab1'; table.FieldDefs.add('row1', ftInteger, 0, true); table.AddIndex('pkRow1', 'row1', '', [soPrimary]); table.CreateTable(false,[tpTable, tpPrimaryKey, tpGenerators, tpTriggers]); finally table.Free; end; end; |
AW: PrimärIndex wird nicht angelegt
Anstatt mit AddIndex versuch es doch mal mit IndexDefs.Add.
|
AW: PrimärIndex wird nicht angelegt
...leider tut es das auch nicht
Delphi-Quellcode:
.. vielleicht sollte ich auf DDL umsteigen und das Script dann einlesen.
table.IndexDefs.Add('pkRow1', 'row1', [ixPrimary, ixUnique]);
|
AW: PrimärIndex wird nicht angelegt
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:
Ein Aufruf sieht dann in etwa so aus:
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;
Delphi-Quellcode:
Ich habe aber leider auch keine Idee, warum es bei dir nicht klappt.
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); |
AW: PrimärIndex wird nicht angelegt
Hallo Uwe,
danke - wenn das Feld auf den der primary key gelegt werden soll vom typ ftAutoInc ist, dann wird auch der primary key angelegt. Kann ich aber so dann nicht gebrauchen, da in die Tabelle Daten importiert werden müssen. In den Daten ist das Feld (auf dem der primary key liegt) auch vorhanden. Ich kann dann (leider) kein ftAutoInc verwenden. Den Key kann ich dann vielleicht nach dem Datenimport setzen. Grüße Klaus |
AW: PrimärIndex wird nicht angelegt
Du kannst bei einem AutoInc-Field ja für den Import das Property IdentityInsert auf True setzen.
|
AW: PrimärIndex wird nicht angelegt
danke - gut zu wissen
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz