TLama - 那是 10 分球,谢谢。几个月前我添加了 amAsync 模式,我想我当时并没有实现所有功能。
现在我在这里又读了一次帮助站点,在带有“while”循环的示例中,我的问题得到了准确的答案。
我是stackoverlflow的新手,TLama,我该如何报答你?你节省了我几个小时:)
编辑 1
按照 Frazz 的建议,我将尝试从上面链接的源页面复制一些信息。
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。