WHY?1个月前的问题,到现在都没有人来看~!关于在线程中的TADOQUERY提示EOleSysError标记没有引用存储! (100分)

  • 主题发起人 主题发起人 SuperJS
  • 开始时间 开始时间
S

SuperJS

Unregistered / Unconfirmed
GUEST, unregistred user!
原本在程序中有一个比较复杂的一系列操作,并且是定时执行的,
因为运行时间比较长,所以就把关键的部分移植到线程中了,但是现在有一问题!
原本很正常的TAdoQuery,现在却莫明奇妙的出错了!
代码如下:
Type
TTimeSpr=class(TThread)
public
procedure Execute;override;
......
Var
Adoq:TADOQUERY;
......
procedure TTimeSpr.Execute;
begin
FreeOnTerminate:=True;
FreeAndNil(Adoq);
Adoq:=TADOQUERY.Create(nil); //运行到此处出错!提示EOleSysError标记没有引用存储!
Adoq.ConnectionString:=ConStr;
Loader(mFileName);
end;
这到底是为什么啊?谁来救救我啊!
另外如果我的程序根据条件只创建一个线程,但要等到线程运行结束后就自动结束
主程序该怎么作呢!原来没有移植到线程以前可以用:
procedure Main();
begin
self.load();//处理函数
application.Terminate;
end;
现在的话,如果我一创建线程再马上application.Terminate;就会发生异常错误了!
该怎么解决呢!!
procedure Main();
var
mThread:TTimeSpr;
begin
mThread:=TTimeSpr.Create(true);
mThread.Init(para1,para2);
mThread.Resume;
application.Terminate;//这句如果不加注释的话,程序就会死的很难看了!
end;


 
来人看看啊!这两天真不爽!
 
为什么还是没有人啊?
 
为什么没有人来啊!
 
都是上个月的事情了!为什么还没有人来关注呢!
 
没天理啊!一个人都没有吗~!哪怕是关注!
 
各位高手都那里去了啊!
 
我在执行查询的时候,偶尔会出现这个错误!
不知道为什么!
 
可我是每次都会有这个问题啊!补丁也打过了!不知道为什么啊!
 
你的代码没问题,奇怪
 
天哪,那太没有天理了!
 
>> ....
>> mThread.Resume;
>> application.Terminate;//这句如果不加注释的话,程序就会死的很难看了!
改成
mThread.Resume;
// bThreadEnd是一个Boolean型变量,在你的TTimeSpr线程结束的时候赋为True
while not bThreadEnd do Application.ProcessMessages;
application.Terminate;//这句如果不加注释的话,程序就会死的很难看了!
 
>>Adoq:=TADOQUERY.Create(nil); //运行到此处出错!提示EOleSysError标记没有引用存储!
可能是因为ADO没有初始化,你在你线程Unit的initialization段加入CoInitialize,
在finalization加入CoUninitialize。(需要Uses ActiveX)
 
谢谢,我试试先!
 
解决了到
http://211.101.4.25/delphibbs/dispq.asp?lid=716971
通知一下!
 
好象上面的方法都不行。
好象如果在主线程中用adoconnect先connected一下,问题好象解决了。
adoc.connected:=true;
adoc.connected:=false;
 
先这样吧!太久了!
 
后退
顶部