sdacを使用すると、次のようにプログラムをユーザー入力に応答させることができます。
while Query.Executing do
begin
Application.ProcessMessages;
Sleep(1);
end;
anydacクエリで同じコードを実装するにはどうすればよいですか(同様の機能はありません)。
Delphi xe2 と anydac v6 を使用しています。
AnyDAC はさまざまな実行モードをサポートしています。現在の動作状況を確認するには、 を使用しますADQuery1.Command.State
。これは疑似コードです (ここには Delphi はありません)。
ADQuery1.ResourceOptions.CmdExecMode := amAsync;
ADQuery1.Open;
while ADQuery1.Command.State = csExecuting do
begin
// This is NOT RECOMMENDED
Application.ProcessMessages;
Sleep(1);
end;
ただし、while
ブロックで行っているのはGUIメッセージの処理だけなので、モードを使用するのが最善の策だと思いますamNonBlocking
。これは、クエリが終了するのを待ちますが(ブロックを回避しwhile
ます)、GUIをブロックしません(ブロックしません)キーボードとマウスのイベントを無視してください。)
ADQuery1.ResourceOptions.CmdExecMode := amNonBlocking;
ADQuery1.Open;
詳細については、開発者の Web サイトにあるドキュメントを参照してください: Asynchronous Execution。