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.