我现在只想说一句:救命啊!!!!!!!!!!(数据库方面的问题)(100分)

  • 主题发起人 主题发起人 liguang
  • 开始时间 开始时间
L

liguang

Unregistered / Unconfirmed
GUEST, unregistred user!
事件经历是这样的.
我需要把一些对一个数据库的查询操作封装到一个DLL当中,由于操作这个DLL的程序所要求的
效率比较高,所以我的设计思路是在一个进程进入这个DLL的时候创建一个与数据库的连接,
然后主调程序运行当中就一直用这个数据库连接查询得到要需要的数据.在主调程序退出时
关闭这个数据库的连接,并释放掉资源.
具体是这样做的.在DLL的函数单元的initialization和finalization部分加上如下两行代码
initialization
Form1:=TForm1.Create(nil);

finalization
Form1.Free;
然后再在导出的DLL函数中,调用这个窗体内的控件对数据库进行查询并反回结果.
然后,查询过程一切正确,就是在主调程序关闭的时候,就是出无效内存访问错误(我用的是
WIN2000),调试的时候把我的DELPHI搞死好几次.
我本来对数据库就不熟,更何况遇到这种问题呢.所以想向各位大侠请教,各位大侠救救小弟吧.
 
不知你的dll是如何寫的,但我看你的dll中創建了一個form,按說,在dll中是不能如
此創建form的,您不妨將finaliztion處的 form1.free去掉,這樣有內存遺憾,但很可能就
不會有內存訪問錯誤了.如是這樣,就和你form的創建有關係了.
 
这样子是没错的。

只看看是不是你其它的地方错了,比如在其它地方free了,或主调程序错了?等等
 
我想应该是DELPHI数据库本身的问题,很想听一听其它大侠们的见解.
 
无效内存访问错误应该不会是数据库的问题,大多是由于访问了无效的对象产生的错误,
所以我认为还是检查一下对象的释放问题。
我不赞成使用initialization和finalization来生成和释放Form,我一般是在DLL中导出两
个函数,如:ShowForm、FreeForm,在这两个函数中创建和释放Form,这样就不会有那个
问题了。

 
应该是释放的问题,我遇见过,不过不知你其他的代码是怎么写的。
 
京大侠是怎样解决问题的.能不告之。
 
在主use单元添加
sharemem,
 
一般访问无效内存的错误大多是由对未进行实例化的对象引起的。
再检查一下你的代码吧!
 
在uses单元最后放入sharemem试试!
 
加入query1.unprepare试试
 
现在解决了吗????
 
后来我使用COM的方式调用了ADO的原先对象来编写程序,问题就这样解决了。
 
后退
顶部