2秒でデータを取得が終わる前に、QueryのOpen() を実行したらデータセットがメモリから破棄されて、そこにアクセスしたr落ちるんじゃね?

>TQueryを使う際になにか注意事項

2秒以内に処理が終わらなかったら、処理をスルーするって工夫要るけど。
それに加えてQuery使いまわすんじゃなくて、作り直したら?

Query = new TQuery(this);
try {
 Query->SQL->Clear();
 //処理
__finally {
 delete Query;
}