Moinsen,
bin grad einwenig am verzweifeln.
Ich füge mit folgender Methode einen Datensatz in eine Tabelle ein:
Delphi-Quellcode:
inherited Insert;
if (fstate = rsNew) then
begin
fsql.SQL.Text := 'INSERT INTO actionarea (areaname,areadescr) VALUES(:areaname,:areadescr);';
fsql.ParamByName('areaname').AsString := fname;
fsql.ParamByName('areadescr').AsString := fdescr;
fsql.ExecSQL;
fsql.Connection.Commit;
faaid := GetInsertedId;
findex := faaid;
fstate := rsNone;
end;
fsql ist dabei eine TZQuery.
Um nun den Primärschlüssel (autoincrement) zu ermitteln, hab ich in der
Basisklasse die Methode GetInsertId implementiert:
Delphi-Quellcode:
result := -1;
fsql.SQL.Clear;
fsql.Params.Clear;
fsql.SQL.Text := 'SELECT last_insert_rowid() as last FROM :table;';
fsql.Prepare;
fsql.ParamByName('table').AsString := ftable;
fsql.Open;
if not fsql.Eof then
begin
fsql.First;
result := fsql.FieldByName('last').AsInteger;
end;
fsql.Close;
end;
ftable ist dabei in Feld, das beim erzeugen der abgeleiteten Instanz entsprechend gesetzt wird.
Problem ist nun, das ich genau beim fsql.open eine
Exception "
SQL logic error or missing database" bekomme.
Die Datenbankverbindung ist jedoch da, der Datensatz wird auch brav eingefügt. Ich hab auch die Abfrage "last_insert..." manuell ausgeführt (natürlich den entsprechenden Tabellenamen eingefügt). Da funktioniert das ganze wunderbar. Woran kann das noch liegen ?