2014-10-09 206 views
1

我使用Delphi XE2与Firedac组件。 我有一个很奇怪的问题。我有自定义组件,它使用自己的Firedac TQuery组件来搜索一些数据。奇怪的是,打开查询后 - 它还没有激活。Delphi Firedac:等待打开TFDQuery

qry.Open; 
ShowMessage(BoolToString(qry.Active,True); 
FunctionToDoAfter(SilentMode); 

在代码的那一部分,我在消息中有'False'。它接近TQuery.Open方法运行某个线程来打开它。 有人可以请教我,在运行FunctionToDoAfter之前,我该如何等待打开查询?

最好的问候, 彼得

+0

你的表单上是否有TADGUIxWaitCursor?如果没有,你尝试添加一个吗? – MartynA 2014-10-09 17:36:35

+1

您是否更改了'ResourceOptions.CmdExecMode'属性的值(我想您刚刚切换到异步模式)? – TLama 2014-10-09 18:27:32

+0

MartynA - 我在应用程序上有* WaitCursor组件。不在CustomComponent中,但我没有尝试添加一些。 – Quasik 2014-10-09 21:20:04

回答

1

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。

+0

既然你是新来的,我会给你一些建议。由于这个答案可能会被删除,因为它对别人没有多大用处。请在此答案中包含您直接链接的网站的相关信息(链接会随时间而中断),以便其他用户可以查看解决方案,然后接受答案。 – Frazz 2014-10-10 06:30:45

相关问题