我正在创建一个运行时包,其中包含我的主应用程序可以使用的类,但是我遇到了数据访问问题。 我的主应用程序包含一个指向BDE别名的TDatabase。在运行时,我的包被动态加载,并且在包中调用的方法创建TQuery并打开它,用返回的数据填充对象,然后将对象返回到主应用程序。 TQuery使用主应用程序中的TDatabase连接到数据库。 所有这一切工作正常,但当我关闭应用程序时,我得到一个访问冲突:“项目C:... GUI.exe出现错误消息'访问冲突在0x7c9102db:写入地址0x00040ffc'。进程已停止。使用步骤或运行到继续”。 如果我的方法创建了TQuery但没有打开它,则不会发生此错误。我不知道为什么会这样!当我关闭应用程序时,我的TQuery已关闭并释放正常,我的包已卸载好,但在表单被销毁后发生错误。 我正在使用Delphi 5 BTW,我试图简短,所以如果我错过任何有用的信息让我知道,任何帮助感激不尽。
由于
P.S。我知道使用Delphi 5和BDE是古老的,但我现在坚持使用它!
答案 0 :(得分:1)
如果你不释放你的TQuery怎么办?我的意思是,当应用程序终止时,尽量不要释放你的TQuery对象。
答案 1 :(得分:0)
这发生在我使用dbExpress时,终结部分会在数据模块析构函数之前触发,当应用程序被Abort()
编辑时会引起很多头痛。
所以,我猜是
我说驱动程序,因为它们通常只按需加载/初始化,因此如果不使用它就不会出错。所以,也许当你的包被卸载时,它会最终确定驱动程序。
试试这个:
并查看这是否有效而不会引发异常。如果它不起作用,那么我想我可能是对的,我们将试图弄清楚如何使这项工作。
上帝保佑!
答案 2 :(得分:0)
听起来像单元初始化/终结订单问题。通常由使用列表中的单位顺序以及您的包所需的包来确定。
尝试解决问题的最佳方法是使用Delphi,或带有.EXE 的软件包调试Delphi。
最后一个很重要,因为如果您开始使用EXE进行调试,旧的Delphi版本将无法始终找到包的符号。
步骤
您可能希望设置断点以观察初始化/最终确定顺序(请参阅this post,参考和评论以供讨论)。
然后调整您的使用列表和包装要求部分。
- 的Jeroen