Einzelnen Beitrag anzeigen

fisipjm

Registriert seit: 28. Okt 2013
298 Beiträge
 
#9

AW: FireDac ODBC Query bringt alte Daten

  Alt 26. Aug 2022, 12:05
Wann endet ein Transaktion bei Firedac (Firebird?) Ich mache ja breits ein Open/Edit/Post/Close und bei der anderen Query ebenfalls ein Open/Close.
Bei Firebird müssen Transaktionen explizit committed werden. Wird einfach die Verbindung geschlossen (Programm beenden), hängt es von den Datenbankkomponenten ab, ob das ein Commit oder Rollback wird.
Erst in Firebird 4 gibt es auch von der Datenbankseite die Möglichkeit, AutoCommit zu konfigurieren.

AutoCommit wäre in diesem Fall aber auch falsch. Was ist denn, wenn zwischen "HolDieNummer" und "SetzDieNummer" jemand anders die Nummer erhöht? Da müsste "SetzDieNummer" als 3. Parameter den vorherigen Wert der Nummer abfragen. Also nur erhöhen, wenn zwischendurch niemand anders erhöht hat.

P.S.: warum nicht alles in einem Rutsch?
Code:
UPDATE nummernkreise SET zaehler = zaehler + 1
WHERE Spalte1 = :Kriterium1 and Spalte2 = :Kriterium2
RETURNING OLD.zaehler
(vorausgesetzt, das geht mit ODBC)
Gute Punkte. Zum Thema wenn jemand dazwischend eine Nummer holt. Ja, in der Theorie möglich, in der Praxis spielt sich die Abarbeitung im Millisekunden Bereich ab.
Gute Idee mit der Update und Retruning methode, allerdings muss ich die Nummer noch in eine andere Tabelle schreiben und darf die Nummer in den Nummernkreisen erst updaten wenn das Schreiben auch tatsächlich funktioniert hat.

Was ich nicht verstehe ist, ein Commit betrifft doch normal nur das Updaten. Das Updaten funktioniert aber, alleine die Select abfrage zum abrufen holt den alten wert. Der neue Wert steht zu dem Zeitpunkt aber definitiv schon der Datenbank. Ich glaube also nicht das es an dem Commit liegt.
  Mit Zitat antworten Zitat