如何在执行Anydac Query时保持程序响应?

时间:2012-12-26 18:12:51

标签: delphi delphi-xe2 anydac

使用sdac我可以让程序响应用户输入:

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

如何使用anydac查询实现相同的代码(没有类似的功能)?

我正在使用delphi xe2和anydac v6。

1 个答案:

答案 0 :(得分: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;

有关详细信息,请参阅开发人员网站中的文档:Asynchronous Execution