在原来的程序中每执行一次button1click的代码,内存就泄露几十到上百K,执行几十次就异常退出应用程序了。
  为排为其他影响,重建一新工程,只加一个button1,结果虽每点一次button1泄露量减小到十几到几十,问题依然存在。
  程序执行的是结果正确。
procedure TForm1.Button1Click(Sender: TObject);
begin
    Query1.SQL.Clear;
    Query1.SQL.Add('select count(*) as mycount from a where test=1');
    Query1.ExecSQL;
    Query1.Active:=true;
    caption:=Query1.fieldbyname('lbcount').AsString;
    Query1.Active:=false;
//    Query1.Close;//加上此句和去掉结果没变化
end;procedure TForm1.FormCreate(Sender: TObject);
begin
  Query1.DatabaseName:='d:/test';
end;我不知道哪出了问题,请各位帮忙。谢谢!

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      with Query1.Create(Nil) do
      begin
      Try
        DataBaseName := 'D:/Test' ;
        Sql.Text := '...' ;
        try
          Open / ExecSql ;
        except 
        end ;
      Finally
        Free ;
      End ;  
      end ;
    end ;   
      

  2.   

    这句Query1.Create(Nil)是什么意思?
    我试了不行,结果出不来。而且第二次执行时就报错。
    应该是查询时生成的临时表占用的内存,如何才能删除掉这个临时表呢。
    或者将查询结果每次都放到同一临时表里也可以。
      

  3.   

    uses DB ;Var   Query1 : TQuery ;  Query1 := TQuery.Create(Nil) ; // 不指定 owner 自己释放
      

  4.   

    已经试过动态创建Query1了,刚刚又试了。每次都可以得到正确结果并成功释放,但是内容存每次仍然在减少。Free只Free了Query1的内存,但临时表所占空间仍没释放。执行一百次内存就被占去了上1M多。而程序中是经常要调用此操作的。