Delphi Firedac:等待打开TFDQuery

时间:2014-10-09 17:20:07

标签: sql delphi firedac

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

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

对于代码的那部分,我在消息中有'假'。它接缝TQuery.Open方法运行一些线程来打开它。 有人可以建议我,在运行FunctionToDoAfter之前,我该如何等待打开查询?

最好的问候, 彼得

1 个答案:

答案 0 :(得分:1)

TLama - 这是10分球,谢谢。几个月前我已经添加了amAsync模式,我认为我还没有重新启用所有功能。

现在我又读了一次help site here,并且在我的问题中我的问题得到了确切答案,而#39;同时'循环。

我是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。