Hallo.
Leider befindet sich der vom RDBMS vergebene Schlüssel nach einem Insert nicht im record buffer des Programms. Deshalb hat sich eine andere Vorgehensweise durchgesetzt. Der Generator ist ja schon da:
CREATE GENERATOR "GEN_TBL";
Man definiert einen before insert trigger für die Tabelle:
SQL-Code:
CREATE TRIGGER "TBL_BI0" FOR "TBL"
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.id = 0) THEN
NEW.id = GEN_ID(GEN_TBL, 1);
END
Auf diese Weise wird immer ein konsistenter primary key sicher gestellt. In der Anwendung besorgt man sich dann den nächsten Generator-Wert:
SELECT GEN_ID(GEN_TBL, 1) FROM RDB$DATABASE
Den verwendet man dann auch für die foreign keys. Wenn man transaktionsgeschützt arbeitet, dann kann man sich den Schlüssel auch direkt nach der Verwendung besorgen:
SELECT GEN_ID(GEN_TBL, 0) FROM RDB$DATABASE
Grüße vom marabu