我想這可能是已經介紹了Delphi西雅圖之間的東京(10.2)一FireDAC(或IDE)的bug。我發現如下,我可以重現它:
創建西雅圖一個新的多設備(FMX)項目。
添加數據模塊到項目並添加FDConnection它。我將FDConnection配置爲使用MSSQL驅動程序,將連接設置爲使用OS身份驗證,本地Sql Server和其上的現有數據庫。我將LoginPrompt設置爲false。
我在窗體中添加了FDQuery1,使表單使用數據模塊的單元,然後將FDQuery1的連接設置爲datamodule上的連接,並將「select * from mytable」添加爲它的Sql。然後我在OI中將FDQuery1.Active設置爲true。 FDQuery1打開沒有投訴。我將FDQuery1.Active重置爲false,保存該項目並關閉它。
我關閉西雅圖,開始了東京和開盤項目。當我將FDQuery1.Active設置爲true時,我得到了與您所報告的完全相同的異常消息。有趣的是,OI然後更新FDQuery1.Active以顯示True
。
然後,我將FDQuery1.Active設置爲false,則返回true,並且發生異常而不是。
我關閉並重新啓動東京,重新打開該項目,並再次首次(但只是第一次)我將FDQuery1.Active設置爲true,異常再次發生。
歡迎您將問題報告中的上述步驟包含在Emba中。順便說一句,我沒有花時間調查項目的運行時行爲。
在猜測 - 這只是一個猜測 - IDE中的某處出現問題,它表明它必須創建一個datamodule的實例,以便FDConnection可以建立打開FDQuery1所需的連接。如果這是正確的,它不應該影響運行時間的行爲,但就像我說的,我沒有調查過。如果我是對的,我認爲這比煩惱更重要。
更新:這個問題似乎是FMX-具體。我在新的東京VCL項目中重複步驟1-3,即使第一次將FDQuery1.Active設置爲true,也不會發生異常+錯誤消息。
更新#2:這個問題在運行時很容易重現。您只需從Project的Forms |中刪除數據模塊自動創建列表,然後在運行時嘗試在創建datamodule之前打開FDQuery。顯然,解決方法只是在打開FDQuery之前檢查數據模塊是否存在,如果沒有,則在代碼中創建它。
順便說一句,在一個真實世界的應用程序中,我個人不會依賴IDE中的TDataSet的Active屬性設置來打開數據集,而是始終用代碼打開它。這是我在德爾福早年所進入的一種習慣,那時數據集和數據源的設計時間設置經常出現問題,這些設置涉及到數據庫連接或位於另一個模塊中的類似於運行時「丟失」的類似數據庫。
我知道你說這個錯誤發生在設計時,但是如果在運行時打開查詢之前將代碼中的dm的FDConnection分配給FDQuery,會發生什麼情況? – MartynA
做MartynA說應該工作。無論如何,如果這也發生在運行時,因爲datamodule尚未實例化,您應該在創建表單之前在dpr中創建它。如果只是設計時間,請檢查您在使用列表中是否有DM單元,並嘗試打開datamodule的dfm。請檢查連接是否處於活動狀態。 –