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.
Link
Ü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:
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;
Im dbHandler habe ich die Database, Transaction Klassen und erzeuge dort die
Query und Table klassen.
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;