Hi Sirius,
leider kenne ich TORacleQuery nicht, aber beim Lesen Deines Posts habe ich mir die Frage gestellt warum DU das so gelöst hast.
Ich hoffe mal das :
Query.Execute;
sich bei TOracleQuery auf Execute eines TThreads bezieht und nicht dem Execute einer TQuery, in dem Fall müßte es nämlich
Query.Active := true; heissen weil Du ein "Select"
SQL hast.
Ich gehe jetzt mal ganz stark von Execute eines TThreads aus, dabei würde mich interessieren wann das Programm an die Zeile :
inc(FQueryCount);
kommt ?! Werden vorher die Events OnThreadRecord, OnThreadFinished aufgerufen ?
Wenn ja, kannst Du nach dem Execute die
Query einfach freigeben.
Dein jetziger Code mit der FQueryCount=0 "Sperre" ist nicht wirklich "Thread-Safe",
gerade wenn Du das ganze nachher aus einem
DB-Event aus aufrufen möchtest,
solltest Du das ganze besser mit einer TCriticalSection schützen.
Ist Deine Funktion "Log" den Thread-Safe ? Alternativ könntest Du erstmal "OutputDebugSTring" verwenden.
Wenn das Oracle
Query-Object auf einem Thread aufbaut, vielleicht gibt es sogar die Eigenschaft "FreeOnTerminate",
dann bis Du aus der Sache fein raus.
Aber ich denke die meisten brauchen um Dir zu helfen ein wenig mehr imput was "TOracleQuery" angeht,
Greetz Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.