2

sdacを使用すると、のようにプログラムをユーザー入力に応答させることができます。

while Query.Executing do
begin
  Application.ProcessMessages;
  Sleep(1);
end;

anydacクエリで同じコードを実装するにはどうすればよいですか(同様の機能はありません)。

Delphi xe2 と anydac v6 を使用しています。

4

1 に答える 1

4

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

于 2012-12-28T14:41:46.640 に答える