使用sdac我可以让程序响应用户输入:
while Query.Executing do
begin
Application.ProcessMessages;
Sleep(1);
end;
如何使用anydac查询实现相同的代码(没有类似的功能)?
我正在使用delphi xe2和anydac v6。
答案 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。