Einzelnen Beitrag anzeigen

Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#18

AW: Fehler mit DBNavigator

  Alt 26. Jul 2015, 13:54
Das Verständnis für die Vergabe des PK ist Grundvoraussetzung!
Wenn im Before Insert Trigger steht:
Code:
  if (new.id is null) then
    new.id = gen_id(gen_adresse_id, 1);
ist erst mal alles fein.
Lässt man die Abfrage auf "is null" weg, kann das schon ein Problem sein!

Die Query - Komponenten bieten verschiedene Lösungen an.
Bei TIBQuery und auch anderen kann man den Generator - Name angeben.
Dann wird beim Post nach einem Insert die ID von der Anwendung und nicht vom Server erzeugt.
Dadurch kennt die Query den Wert der ID und kann diesen benutzen, ohne vorher eine Synchronisation mit dem Server durchführen zu müssen.
Hätte ich hier im Trigger die Zeile "if (new.id is null) then" weggelassen, hätte ich einen netten Effekt.
Der Server vergibt auch eine ID, die in der Regel 1 höher ist als die, die die Query jetzt weiter verwendet.

Wenn du also ein Update machst, wird er keinen Datensatz finden oder im schlimmsten Fall einen Datensatz updaten, den ein anderer gerade angelegt hat.

Seit FB 2.5 gibt es das RETURNING, welches von den meisten Komponenten unterstützt wird.
Die Einstellungen sind auch hier bei den unterschiedlichen Komponenten unterschiedlich gelöst.

Ich kenne die TZQuery nicht.
Also solltest du:

- Trigger prüfen
- nachsehen, ob man bei TZQuery den Namen des Generators irgendwo hinterlegen kann
- und das Ergebnis (wie Sir Rufo ja schon sagte) mit dem Debugger überprüfen.

Frank
Frank Reim
  Mit Zitat antworten Zitat