Hallo zusammen,
Ich habe ein mekrwürdiges problem mit dem Returning Wert beim einfügen in eine Tabelle.
Ich habe 2 Kunden (hier ist das Problem verstärkt aufgetreten).
Wir verwenden den Firebird in der Version 2.1.2 bzw. 2.1.3 in der Classic-Installation (sowohl 32 bit als auch 64 bit)
ich habe eine Tabelle mit einem PrimaryKey (Zaehler) dieser wird immer per BeforeInsert-Trigger begelgt.Das funktioniert ich immer korrekt.
allerdings kommt ab und zu folgendem Problem.
Ich setze folgendes statement über ein IBSQL-Komponente ab
Delphi-Quellcode:
IBSQL.close
IBSQL.sql.clear;
IBSQL.sql.text := 'Insert into TBL (Nr) values (1) Returning Zaehler';
IBSQL.ExecSQL;
IBSQL.fieldbyname('Zaehler').asInteger;
Der Datensatz wird auch korrekt in der
Db angelegt und hat auch einen gültigen Zaehler.
Select Zaehler from TBL where Nr = 1
Alles OK und im Feld Zaehler steht der richtige und gültige Wert.
Wenn ich allerdings auf IBSQL.fieldbyname('Zaehler').asInteger zugreife hat dieses Feld 0 obwohl der Datensatz in der Tabelle einen gültigen Zaehler hat. dies Habe ich per
SQL-Monitor geprüft und ist auch ok.
Das komische an der Sache ist, das dieses Problem nur sehr sehr unregelmäßig auftritt.
Es werden ca 1,5 mio Daten pro Nacht eingefügt und dieser Fehler tritt etwar 3-4 Datensätzen im Monat auf. (Backup/Restore wird auf Kundenwunsch jede Woche durchgeführt).
Ein Transactionsfehler kann ich hier zu 100% ausschließen. Zumal nach einem "Commit" ja beim zurgiff auf das Feld ein Fehler ausgelöst würde (Feld nicht gefunden).
Kennt noch jemand das Problem oder sogar eine Lösung? ich wäre für jeden tipp Dankbar da ich schon sehr lange an dem Problem arbeite und einfach keinen lösungsansatz habe.
Das schwierige ist, das ich das Problem bei mir auf dem PC nicht nachfollziehen kann.Selbst mit der gleichen
DB,gleiches Programm,gleiche Daten,gleichen Server. Alles ist identisch und ich bekomme den Fehler einfach nicht hin.
Danke schonmal im Vorraus