【问题标题】:Delphi Firedac: Wait for open TFDQueryDelphi Firedac:等待打开 TFDQuery
【发布时间】:2014-10-09 17:20:07
【问题描述】:

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

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

使用这部分代码,我在消息中显示“False”。它接缝 TQuery.Open 方法运行一些线程来打开它。 有人可以告诉我,在运行 FunctionToDoAfter 之前,我该如何等待打开查询?

最好的问候, 彼得

【问题讨论】:

  • 您的表单上是否有 TADGUIxWaitCursor,如果没有,您是否尝试过添加?
  • 您是否更改了ResourceOptions.CmdExecMode 属性的值(我猜您刚刚切换到异步模式)?
  • MartynA - 我在应用程序上有 *WaitCursor 组件。不在CustomComponent中,但我没有尝试添加一些。

标签: sql delphi firedac


【解决方案1】:

TLama - 那是 10 分球,谢谢。几个月前我添加了 amAsync 模式,我想我当时并没有实现所有功能。

现在我又读了一遍help site here,在带有“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。

【讨论】:

  • 既然你是SO新手,我会给你一些建议。因为这个答案可能会被删除,因为它对其他人几乎没有用。请在此答案中包含您直接链接的网站的相关信息(链接会随着时间的推移而中断),以便其他用户可以看到解决方案,然后接受答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多