Einzelnen Beitrag anzeigen

alex517

Registriert seit: 23. Nov 2004
Ort: Bernau b. Berlin
273 Beiträge
 
Delphi XE5 Enterprise
 
#20

Re: Firebird : Tabelle erstellen mit AutoInc-Feld

  Alt 26. Mai 2007, 11:31
Zitat von Elvis:
Nicht zu schnell widersprechen! ( )
Oh, doch!
Zitat von Elvis:
Und ich hoffe, dass du in der Doku deiner Software hinterlegt hast, dass niemand einen Wert für die ID angibt, außer er hat ihn vorher zu Fuss aus dem Generator geholt.
Ansonsten schreibt einer eine 1000 rein und irgendwann, 3 Wochen später, will dein Programm über den friemeligen "Generator abfragen & Wert beim Insert mitgeben"-Weg einen Datensatz einfügen und es knallt! Nun, irgendwann musste der Generator ja die 1000 erreichen.
Das Holen der ID über select GEN_ID(GEN_..._ID, 1) from rdb$database erfolgt durch das Programm direkt vor dem Absetzen des Insert-Statements und ist in keinem Fall dem Benutzer überlassen.
Da die neue ID durch den selben Generator erzeugt wird, der auch im Trigger Verwendung findet, kann es niemals vorkommen, dass die IDs doppelt vergeben werden.
Der Vorgang der ID-Vergabe ist also in beiden Fällen (Trigger/select GEN_ID(..)) identisch, er wird nur falls notwendig in das Programm vorverlegt.

Zitat von Elvis:
Natürlich braucht man den Trigger, er sollte die ID aber bedingungslos aus dem Generator setzen, auch wenn beim Insert schon ein Wert dafür angegeben wurde.
Dazu folgendes Szenario:
Ich generiere eine NEUE Rechnung (Rech) mit Rechnungsposten (RPosten) im Formular.
Da Rech- und RPosten-Daten in einer Transaktion gespeichert werden müssen, benötige ich vorher die ID der Rechnung, um diese
in den RPosten-Daten als Link(FK) auf die Rech eintragen zu können. Ich hole mir, wie oben beschrieben, explizit eine neu ID, und gebe diese beim Insert sowohl der Rechnung als auch den RPosten mit.
Fertig!
Äh.., natürlich nur wenn der Trigger nicht einfach bedingungslos der Rechnung eine andere ID verpasst.
Aber den Trigger habe ja ich angelegt und nicht Elvis

Zitat von Elvis:
Hatte ich das wirklich so unverständlich geschrieben?
Nein, nicht unverständlich, aber ich denke, dass ich Recht habe.

Es ist also keine dunkle Ära, man muss nur die Augen aufmachen, damit es hell wird!

Schöne Pfingsten
alex

Alexander
  Mit Zitat antworten Zitat