各位 TADOQuery怎么释放句柄?
EG:
procedure TForm1.Button1Click(Sender: TObject);
var
MyAdo : TADOQuery;
begin
try
MyAdo := TADOQuery.Create(nil);
MyAdo.ConnectionString :=
'Provider=OraOLEDB.Oracle.1;Password= pass;Persist Security Info=True;User ID= user ;Data Source= dbtest';
MyAdo.SQL.Text := 'select * form db1 where id =1'; //到这里就看到产程有句柄了
MyAdo.Open;
Appliaction.MessageBox(MyAdo.FieldByName('Name').AsString,'查到的姓名',mb_ok);
MyAdo.Close;
MyAdo.Free; //或者用FreeAndNil(MyAdo); 一样释放不掉句柄
except
MyAdo.Free;
end;
end;这里产生的句柄到底怎么释放呀??? 在Windows XP 的任务管理器中看句柄 调用一次 句柄就加一次,不下降,内存是释放了,但是就句柄不释放。
请问高人们,到底怎么释放?
如果不释放的话 是不是会有问题??
一般句柄到多少会出问题?????
EG:
procedure TForm1.Button1Click(Sender: TObject);
var
MyAdo : TADOQuery;
begin
try
MyAdo := TADOQuery.Create(nil);
MyAdo.ConnectionString :=
'Provider=OraOLEDB.Oracle.1;Password= pass;Persist Security Info=True;User ID= user ;Data Source= dbtest';
MyAdo.SQL.Text := 'select * form db1 where id =1'; //到这里就看到产程有句柄了
MyAdo.Open;
Appliaction.MessageBox(MyAdo.FieldByName('Name').AsString,'查到的姓名',mb_ok);
MyAdo.Close;
MyAdo.Free; //或者用FreeAndNil(MyAdo); 一样释放不掉句柄
except
MyAdo.Free;
end;
end;这里产生的句柄到底怎么释放呀??? 在Windows XP 的任务管理器中看句柄 调用一次 句柄就加一次,不下降,内存是释放了,但是就句柄不释放。
请问高人们,到底怎么释放?
如果不释放的话 是不是会有问题??
一般句柄到多少会出问题?????
try
...
fianlly
FreeAndNil(obj);
end;
MyAdo.Close;
MyAdo.Free; //或者用FreeAndNil(MyAdo); 一样释放不掉句柄
MyAdo :=nil ;
then
MyAdo := TADOQuery.Create(nil);
MyAdo := TADOQuery.Create(nil);
finally
MyAdo.free
MyAdo.Handle:=0;
MyAdo := TADOQuery.Create(nil); ....
finally
MyAdo.free;
end;
我用Tadoquery打开mdb,FreeAndNil(obj); 后mdb文件就关了
你的方法我试了,好像没有左右,跟没有一样。。句柄还在涨~ 你用Windows XP的任务管理器调出句柄数看下,每次都在涨
to: (cxb2011)
你的方法是怎么搞的? 我这里就是没有ADO的HANDLE呀? 根本就没有呀??
to: (拈花一笑)
兄弟的方法我已经做过了,关键就是FREE掉了,但是句柄还在,而且每执行一次就涨 2 个。兄弟们只有在程序创建时创建ADO,在程序执行中,不FREE掉ADO,句柄就不涨了,但是好像内存没有得到良好的释放,兄弟们在帮忙看看,这每查询一次,用ADO.Close 释放不了内存吗? 不FREE掉的前提 怎么释放内存呀??
EG:private
ADO1: TADOQuery;
//……
peocedure TForm1.Create(Sender: TObject);
begin
ADO1 := TADOQuery.Create(nil);
ADO1.ConnectionString := 'Provider=OraOLEDB.Oracle.1;Password= pass;Persist Security Info=True;User ID= DBName;Data Source= DS';
end;procedure TForm1.Button1Click(Sender: TObject);
begin
try
try
ADO1.SQL.Text := 'select * from dbtbl where id = '''+Trim(Edit1.Text)+'''';
ADO1.Open;
if ADO1.RecordCount > 0 then
begin
Memo1.Lines.Add(ADO1.FieldByName('name').AsString);
end;
finally
//ADO1.RecordSet.close; //怎么感觉好像没有什么用,就第一次释放的时候还可以,后边的都不行
ADO1.Close;
ADO1.SQL.Clear;
end;
except
Application.MessageBox('查询错误','错误提示',mb_ok);
end;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ADO1.Free;
end;这样句柄是不涨了,但是好像内存有点增量~ 兄弟们还有什么高招没有? 或是还有什么东西可以释放呀??
能释放的都释放掉它,给它的内存洗的干干净净最好,呵呵~~
...
MyAdo.Open;
...
MyAdo.Close;
finally
MyAdo.Free;
MyAdo := nil;
end;
测试N久 内存、句柄都不涨了!
结帖了!