![]() |
Datenbank: Firebird embedded • Version: 1.5 • Zugriff über: InterBase Express
Firebird Autoincrement funktioniert nicht
Hallo.
Ich greife über IB-Komponenten von Turbodelphi auf einen kleine Firebird Datenbank zu. Die Tabellen habe ich mit dem SQLManager für Firebird und Interbase erstellt. ![]() Über Delphi öffne ich jetzt die Tabelle und möchte einen neuen Datensatz hinzufügen. Das mache ich über .Append und dann weise ich die Felder per FieldByName zu. Wenn ich jetzt über Post speichern möchte bekomme ich die Fehlermeldung 'Feld 'ID' muss einen Wert haben'. ID ist ein Integer Feld mit Autoincrement und mein Primary Feld. Weise ich ID einen Wert zu, so wird dieser übernommen, bzw. wenn schon vorhanden gibs nen unique / Primary Fehler. Eigentlich sollte er die ID ja automatisch setzten. Hat da jemand ne Idee wo mein Fehler liegt? Nen bischen code...
Delphi-Quellcode:
Im dbHandler habe ich die Database, Transaction Klassen und erzeuge dort die Query und Table klassen.
data := dbHandler.TableCreate(getTableName); // hier wird die Tabelle geöffnet..
data.Open; if not data.Locate('ID',ID,[]) then begin data.Append; end else begin data.Edit; end; SaveToDB(data); // hier werden die Felder gesetzt data.Post; FID := data.FieldByName('ID').AsInteger; data.Close; data.Free;
Delphi-Quellcode:
function TDBHandler.TableCreate(Tablename: String): TIBTable;
var table : tibtable; begin table := TIBTable.Create(nil);; table.Transaction := FTransaction; table.Database := FDatabase; table.TableName := Tablename; result := table; end; |
Re: Firebird Autoincrement funktioniert nicht
Wie hast du den autoinc deklariert (Trigger)?
Wie sieht SaveToDB aus? |
Re: Firebird Autoincrement funktioniert nicht
in SaveToDb werden je nach klasse die Daten in die Table geschrieben.
alle im Stiel von
Delphi-Quellcode:
Die AutoIncrement hat der SQL-Manager angelegt.
data.FieldByName('Bezeichnung').AsString := FBezeichnung;
Ich habe für jede Tabelle einen Trigger und einen Generator Trigger:
Delphi-Quellcode:
Generator:
BEGIN
IF (NEW.ID IS NULL) THEN NEW.ID = GEN_ID(CODECOCONTAINER_ID_GEN, 1); END Im SQL-Manager hab ich unter Generator den namen und eine Value die ich ändern kann. Dann nen Reiter DDL zum Generator mit diesem Inhalt:
Delphi-Quellcode:
Ich hab eben probiert im Trigger das If .. Then wegzulassen, aber dann bekomme ich eine Primary / unique violation. :(
CREATE GENERATOR CODECOCONTAINER_ID_GEN;
SET GENERATOR CODECOCONTAINER_ID_GEN TO 1; |
Re: Firebird Autoincrement funktioniert nicht
Setzt du innerhalb von SaveToDb auch das Feld 'ID' ?
|
Re: Firebird Autoincrement funktioniert nicht
Nein.
Ich hab das zum Testen mal gemacht, aber dann übernimmt er meinen Wert (was ich ja nicht will) oder es gibt ne Fehlermeldung. [edit: Die richtige Meldung] Violation of PRIMARY or UNIQUE KEY contraint "INTEG_12" on table "CODECOMSG" |
Re: Firebird Autoincrement funktioniert nicht
Das sagt ja eher, daß versuchst wird, einen schon vorhandene wert des PK zu setzen.
|
Re: Firebird Autoincrement funktioniert nicht
Ich glaube ich hab meinen Fehler gefunden.
Ich hab keinen Procedure Wrapper? erstellt. Jedenfalls hab ich das eben nochmal mit einer neuen Tabelle probiert und damit hat das geklappt. Ich danke für deine Hilfe.. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:04 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-2025 by Thomas Breitkreuz