簡體   English   中英

Delphi Firedac:等待打開的TFDQuery

[英]Delphi Firedac: Wait for open TFDQuery

我正在使用帶有Firedac組件的Delphi XE2。 我有一個很奇怪的問題。 我有自定義組件,該組件使用自己的Firedac TQuery組件搜索一些數據。 奇怪的是,打開查詢后-它尚未激活。

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

有了那部分代碼,我在消息中有“ False”。 它表明TQuery.Open方法運行某個線程來打開它。 有人可以建議我,在運行FunctionToDoAfter之后如何等待打開查詢?

此致Piotr

TLama-謝謝,那是10分 幾個月前,我添加了amAsync模式,但我認為當時並沒有實現所有功能。

現在,我在這里再次閱讀了幫助站點 ,在帶有“ while”循環的示例中,我的問題有確切的答案。

我是stackoverlflow的新手,TLama,我該如何還款? 你節省了我幾個小時:)

編輯1

按照Frazz的建議,我將嘗試從上面鏈接的源頁面復制一些信息。

FireDac具有四種執行命令的模式。 您可以在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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM