TLama - 那是10分球,谢谢。几个月前,我已经添加了amAsync模式,并且我认为我没有再使用全部功能。
现在我再读一遍help site here,在'while'循环的例子中我的问题有确切答案。
我是stackoverflow新手上,我该如何回报你,TLama?你救了我几个小时:)
编辑1
继Frazz sugestion,我会尝试从上面链接的源页面复制一些信息。
FireDacs有四种命令执行模式。您可以在FDQuery1.ResourceOptions.CmdExecMode中更改它。您还可以在FdQuery1.ResourceOptions.CmdExecTimeout中设置执行命令的超时时间。
的CmdExecModes是:
amBlocking - 调用线程和GUI被阻塞,直到行动结束。
amNonBlocking - 调用线程被阻塞,直到动作完成。 GUI不被阻止。
amCancelDialog - 调用线程和GUI被阻止,直到一个动作完成。 FireDAC显示一个对话框,允许取消一个动作。
amAsync - 调用线程和GUI未被阻止。被调用的方法立即返回。
而命令执行时,通过检查命令状态,您可以等待:
FDQuery1.ResourceOptions.CmdExecMode := amAsync;
FDQuery1.Open;
while FDQuery1.Command.State = csExecuting do begin
// do something while query is executing
end;
有6种不同的指示状态:csInactive,csPrepared,csExecuting,csOpen,csFetching,csAborting。
你的表单上是否有TADGUIxWaitCursor?如果没有,你尝试添加一个吗? – MartynA 2014-10-09 17:36:35
您是否更改了'ResourceOptions.CmdExecMode'属性的值(我想您刚刚切换到异步模式)? – TLama 2014-10-09 18:27:32
MartynA - 我在应用程序上有* WaitCursor组件。不在CustomComponent中,但我没有尝试添加一些。 – Quasik 2014-10-09 21:20:04