Moin,
Alfred Gemsa wrote:
> CREATE TRIGGER NEW_TABLE_BI FOR NEW_TABLE
> ACTIVE BEFORE INSERT POSITION 0
> AS
> BEGIN
> IF (
NEW.ID IS NULL) THEN
>
NEW.ID = GEN_ID(GEN_NEW_TABLE_ID,1);
> END
Ja, das sieht gut aus. Und vermutlich funktioniert es prima, wenn Du per
IBExpert oder einem anderen SQL-Tool Daten in die Tabelle schreibst:
insert into NEW_TABLE(NAME) values ('TEST');
Dabei sollte der Trigger ausgelöst werden und das hier fehlenden Feld
"ID" befüllen. Dabei wird Generator immer nur um 1 erhöht.
Jetzt zurück zu IBDataset. Wenn dort nach einer vergleichbaren Aktion
der Generator um 2 erhöht ist, dann bekommt IBDatabase nix davon mit,
dass da im Hintergrund noch ein Trigger aktiv ist, der ebenfalls eine ID
erzeugt.
Also entweder
a)
auf den Trigger verzichten und nie niemals nicht Daten von Hand per SQL
eingeben...
b)
im IBDataset die Generator-Option wieder abschalten; der Trigger kümmert
sich um die Vergabe einer ID.
Vermutlich willst Du aber *nach* dem .Post die ID des neuen Datensatzes
kennen. Dann bleibt Dir nichts anderes übrig, als *vor* dem .Post selber
den Generator abzufragen und die gelieferte ID in das IBDataset zu
schreiben (OnNewRecord).
HTH
Achim