使用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;
有关详细信息,请参阅开发人员网站中的文档:异步执行。