2014-10-09 86 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

相關問題