Um die beste Möglichkeit direkt auszuschließen: Die UniDAC-Komponenten bieten keinen Timeout für einen Request an?
Leider musst du davon ausgehen, das die Datenbankverbindung (oder die gesamte Bibliothek) nicht mehr korrekt funktioniert kann, wenn du den ausführenden Thread zwischendurch einfach abschießt
Außerdem springt mir ins Auge, dass du deine Critical Section nie freigibst, wenn im Folgenden ein Fehler auftritt:
Delphi-Quellcode:
FpThread := TDatabaseConnectionThread(Pointer(vtThreadDataaObj.AsInteger));
FpThread.Free;
Was schützt die CS denn genau?