错误信息:Cannot perform this operation on an open dataset (100分)

T

Tophi

Unregistered / Unconfirmed
GUEST, unregistred user!
我需要在线程释放的时候前,释放掉TDatabase、TSession数据库控件。
强行终止线程的时候,有些时候会出现这样的错误信息:
Cannot perform this operation on an open dataset
我想知道这个的错误是怎么造成的?该怎么处理。
还有我想了解,释放Tdatabase、TSession前要做哪些动作
我现在的动作是:
if assigned(database) then
begin
database.connected := false;
database.free;
database := nil;
end;
if assigned(session) then
begin
session.free;
session := nil;
end;
指教,指教,急
 
代码本身没什么问题,就怕你在连接到这个DataBase的DataSet控件的事件中写了什么代码导致
了这个错误.
btw,Delphi6中有FreeAndNil函数,不用写两句话了.
 
还有一些table或query未关闭
 
before you do above, do the follow:

set all table 's Active := False;
set all query's Active := False;
database.CLoseDatabase;

 
关键是,你的database、session是在线程的execute里面、或者execute调用的函数里面创建的吗?
不是的话那么你的这2个对象实际不是你的线程的对象
 
你可能还有table,query控件挂接在上面
 
database、session当然是在线程的execute调用的函数中创建的了,可能是如上几位所说
有query没有关闭释放的原因。
有个一问题了,原先的query是用的时候才局部创建的、局部关闭、释放的,这样就没有办
法保证关闭释放了,虽然都有finally,终止线程并不能保证函数能够到finally。
现在我把这些query定义为全局变量了,这样就可以在终止线程前关闭并释放query了。但
是由于嵌套的原因,居然用了4个query,不知道这样对速度的影响是不是很大,我个人感觉
好像有影响的。
又没有什么更加好的建议。
 
现在:
query.close;
query.free;
这样也会提示Cannot perform this operation on an open dataset
怎么回事呢?
 
可是我还没有解决这个问题,失败!
 
顶部