Eine Mutmaßung:
Gleichzeitiger Zugriff: Da der Code in einem Thread ausgeführt wird, könnte es zu Problemen kommen, wenn mehrere Threads gleichzeitig auf die gleiche
ADO-Verbindung zugreifen.
Du musst (höchstwahrscheinlich) die Threadsicherheit gewährleisten, die Zugriffe auf die
ADO-Komponenten /
ADO-Verbindung synchronisieren.
FQuery.RecordCount sollte nach dem FQuery.Open bereits den richtigen Wert enthalten, so dass das Last-First-Konstrukt nach dem Open entbehrlich sein sollte.
Dass RecordCount nicht korrekt war, bzw. auf 0 stand, hab' ich nur (früher mal) bei der
BDE mit DBase und
Paradox erlebt, aber noch nie bei der Nutzung der
ADO-Komponenten und "richtigen" Datenbanken wie Oracle,
SQL-Server, FireBird,
MySQL, ...