[英]Delphi TDataSet in a runtime package
我正在創建一個運行時包,其中包含主應用程序可以使用的類,但是我在數據訪問方面遇到問題。 我的主應用程序包含一個指向BDE別名的TDatabase。 在運行時,我的包會動態加載,並且在包中調用的方法會創建一個TQuery並將其打開,並使用返回的數據填充對象,然后將該對象返回到主應用程序。 TQuery使用主應用程序中的TDatabase連接到數據庫。 所有這些工作正常,但是當我關閉應用程序時,我遇到訪問沖突:“項目C:... GUI.exe出現錯誤消息,提示“訪問沖突在0x7c9102db:寫入地址0x00040ffc”。進程已停止。使用“執行步驟或運行到繼續”。 如果我的方法創建了TQuery但沒有打開它,則不會發生此錯誤。 我不知道為什么會這樣! 當我關閉應用程序時,我的TQuery已關閉並被釋放,我的包已被卸載,但是在銷毀表單后,會發生錯誤。 我使用的是Delphi 5 BTW,我盡量簡短,因此,如果我錯過了任何有用的信息,請告訴我,我們將不勝感激。
謝謝
ps:我知道使用Delphi 5和BDE是過時的,但是我現在仍然堅持使用它!
如果您不釋放自己的TQuery怎么辦? 我的意思是,當應用程序終止時,請不要釋放您的TQuery對象。
這是我使用dbExpress發生的,在應用程序進行Abort()
編輯時,終結處理部分會在數據模塊析構函數之前觸發,這會引起很多頭痛。
所以,我的猜測是
我說驅動程序是因為它們通常僅按需加載/初始化,因此如果不使用它也不會出錯。 因此,也許當您的軟件包被卸載時,它會最終確定驅動程序。
嘗試這個:
並查看這是否有效而不會引發異常。 如果它不起作用,那么我想我可能是對的,我們將嘗試找出如何使它起作用。
上帝保佑!
聽起來像是單元初始化/完成訂單問題。 通常,這取決於使用列表中的單位順序以及包裝所需的包裝。
解決該問題的最佳方法是使用Delphi調試Delphi, 或使用.EXE調試程序包 。
最后一個很重要,因為如果您開始使用EXE進行調試,則較早的Delphi版本將無法始終找到包的符號。
腳步
您可能想要設置斷點來監視初始化/完成順序(有關此內容的討論,請參閱本文 ,參考資料和評論)。
然后擺弄您的使用清單和包裝要求部分。
--jeroen
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.