別のスレッドからクエリをキャンセルする機能を使用して、1 つのスレッドで SQL コマンドを同期的に実行する必要があります。
私が知る限り、このタスクを実行するには、ODBC 関数 SQLCancel と接続オブジェクトへのハンドルが必要です。
しかし、この分野の新人として、これを理解するのは困難な戦いのように感じます.
Delphi 2006 でこれを実現するためのサンプル コードを提供してもらえますか?
セットアップの説明:
スレッドA
ODBC_Connection.Execute('SELECT a,b,c INTO ##MyTable FROM LongRunningQuery')
スレッド B
[SQLCancel を使用してスレッド A の SQL ステートメントをキャンセルする魔法のコード]
注: ADOCommand オブジェクトを使用してクエリを非同期的に実行する現在のソリューションがあります。これにより、Command オブジェクトの Cancel メソッドを使用できるようになります。しかし、コマンドのステータスをポーリングしていつ完了したかを確認するための Sleep 関数を使用した while ループがあるため、これは遅いです。そのため、同期実行に基づくソリューションが必要です。何百ものクエリがあるため、パフォーマンスが重要です。
追加情報: SQL Server をバックエンドとして使用しているため、これが私が探している主要なソリューションです。もちろん、Oracle やその他のデータベースの取り扱いに関するアドバイスも興味深いものですが、私の場合は二次的なものです。