Delphi的奇怪现象(50分)

  • 主题发起人 主题发起人 xhm
  • 开始时间 开始时间
X

xhm

Unregistered / Unconfirmed
GUEST, unregistred user!
我用Delphi4+Sybase11开发一个简单的数据库应用,在数据模块的
Create事件设置Database控件的Connected属性为True,在主窗口的
Destroy事件关闭数据库的连接:Database.Connected:=false;
则在Delphi IDE中出错:External exception C0000008。
如果将该语句注释(不关闭连接)在主窗口关闭时出现错误:
Exception EExternalException in module ntdll.dll at
C0000008
External exception C0000008

如果用Sqlanywhere 5.5 就不会出现这个问题。而且编译过的EXE
运行也不会出错!

这是为什么?请问哪位大虾遇到过此事?谁能救我!
 
不知道,我也想听。
如果编译为EXE正确,那么就编译把
 
> 在主窗口的Destroy事件关闭数据库的连接:
^^^^^^
你不应该在主窗口的Destory事件中关闭数据库或引用任何非
本窗口对象的方法,因为你的DataModule可能已经先于主窗口
Destroy了(主窗口和数据模块释放顺序要视你在程序中的建立
顺序而定). 所以你会出现异常. 你若需要关闭数据库, 请
在DataModule的OnDestory事件中实现. 这样既符合规范, 又不
必关心释放顺序.


 
如果Exe和SqlAnyWhere没问题的话,你要换个低版本的OpenClient了。
 
不能在主窗口的ONDESTROY关闭DATABASE,因为数据库已经关闭,
 
首先,你可以在集成开发环境外运行你的程序,看是否有此问题。
其次,你可试着在表单的OnClose事件中加入:
if database.connected then database.connected:=false;
我同意SeaKey的意见,不应在OnDestroy事件中关闭数据库。
 
哈哈,不用手动关闭数据库了!
你的程序在编译的时候肯定不会抱错,而且exe执行时也没问题
因为我也遇到这个问题,什么ntdll.dll.....
不管他
 
多人接受答案了。
 
后退
顶部