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。
你的表單上是否有TADGUIxWaitCursor?如果沒有,你嘗試添加一個嗎? – MartynA 2014-10-09 17:36:35
您是否更改了'ResourceOptions.CmdExecMode'屬性的值(我想您剛剛切換到異步模式)? – TLama 2014-10-09 18:27:32
MartynA - 我在應用程序上有* WaitCursor組件。不在CustomComponent中,但我沒有嘗試添加一些。 – Quasik 2014-10-09 21:20:04