ADO在Win2000下多线程问题(100分)

  • 主题发起人 主题发起人 TheCodec
  • 开始时间 开始时间
T

TheCodec

Unregistered / Unconfirmed
GUEST, unregistred user!
我不知道这个该算多线程的问题,还是数据库的问题,所以才贴到这里来了。

是这样的,我创建了一个线程类,里面有个ADOConnection成员变量,在初始化线程类
的时候我连接到数据库,然后在Execute的时候,我动态创建了TADOQuery(ADOQuery :=
TADOQuery.Create(nil)),执行完查询操作之后,我释放了TADOQuery(ADOQuery.Destory)
然后线程结束,这样在Windows 98/XP下都没有问题,但是在Windows 2000下第二次创建的
时候,程序就会无缘无故的跳出来了,就是退回到操作系统,真是奇怪阿,所有的补丁我
都打了,Delphi的,ADO的,环境是D5 /ADO 2.7。如果说是与NT内核不兼容,为什么XP下又
没有问题呢?
谢谢
 
你跟踪一下不就知道了
 
我跟踪了阿,要不然我怎么知道是在第二次创建TADOQuery对象的时候才跳出来的?
 
经过测试,发现只有在Windows 2000 Server 和 Windows 2000 Advance Server有问题,
有谁知道阿,谢谢。
 
释放 AdoQUery的时候用 freeandnil(Adoquery) 看看.
而且最好用 try..finally..end结构.
 
那ADOQuery.Destory还要不要呢?
 
不用了,FreeAndNil是Delphi推荐的释放对象的方法.
 
谢谢,我试试


对了,你动作好快,呵呵

 
我试过了你的方法,在第二次创建之前AADOQuery的确为nil,但是还是会跳出来,
程序非正常结束[:(]。为什么在Windows 2000 Server/Advanced Server下才会
有问题,而在 Windows 98/Me/XP/2000 Professional都没有问题???


在线程中创建COM和释放COM,有什么需要注意的吗?

急啊!~~~~~~~
 
初始化com/ole对象了吗?
try
OleInitialize(nil);
......
finally
oleuninitialize;
end;
 
谢谢你
的确是没有使用OleInitialize和OleUninitialize造成的,现在问题已经解决了。
 
后退
顶部