Einzelnen Beitrag anzeigen

fisipjm

Registriert seit: 28. Okt 2013
299 Beiträge
 
#7

AW: FireDac ODBC Query bringt alte Daten

  Alt 25. Aug 2022, 11:06
Hasllo,
es wurde doch bereits alles gesagt.

Query1 benutzt Transaktion1
Query2 benutzt Transaktion2
Query3 ist deine externe Abfrage

Die beiden kommen sich nicht ins Gehege dank des Transaktionsmanagements von Firebird.
Wenn nichts weiter eingestellt ist, gilt "Read Committed"

Wenn Query1 z.B. 10.000 Selects macht (Lagerinspektion) und Query2 "zwischendurch" einen Änderung am Lager vernimmt, interessiert das Query1 nicht.
Jeder arbeitet praktisch mit einer Kopie der DB zum Zeitpunkt des Starts der jeweiligen Transaktion.

Bei Query3 startest du (ohne es zu Wollen/Wissen) immer eine neue Transaktion, die Änderungen der vorherigen Queries sind also sichtbar, sofern sie committed sind.

Lösung.
Du muss bei den Queries explizit ein StartTransaction/Commit machen.
Hi Hoika,

danke für die Erklärung. 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.

Ich wäre davon ausgegangen das mit einem Close alle offenen Transactions geschlossen werden. Beim nächsten Loop lauf mache ich ja wieder ein Open auf die Query, zwar mit den gleichen Parametern, aber eben wieder mit einem "frischen" Open. Wie sage ich der Transaction das sie sich die Daten jetzt bitte neu vom Server ziehen darf? Ein Commit wird mir verweigert mit dem hinweis das ich die Funktion CachedUpdates nicht aktiv hab, ergo wäre es nichts nötig?
  Mit Zitat antworten Zitat