关于使用Query查询时的内存释放问题

                            
我写了一个函数,根据查询条件从数据库中查找照片数据,如果有的话,就写入文件中,可是我发现了很严重的问题:随着查询的次数增加(10000左右),内存的使用是逐步上升达到34-40M之间,直到报[HEC][ODBC   XXX   Driver]   Memory   managerment   error,程序中止。如果去掉查询的语句,直接读取一个JPG文件,就没有问题,各位帮忙看看,到底是什么问题了,如何解决了,很急的,如果分数不够,还可以加   
  函数如下:  
  function   TfrmMain.SeachDictionary_Stream(const   FieldValue,  
      TableName:   String):Boolean;  
  var  
        strSql:   String;  
        strTemp:   string;  
        intCompress:   Integer;   //ÍƼöµÄѹËõ±¶ÂÊ  
        TempStream:   TmemoryStream;  
        PicQuery:       TQuery;  
  begin  
        Result   :=   False;  
   
        TempStream   :=   nil;  
        PicQuery   :=   nil;  
   
        strSql   :=   'Select   BMP,JPEG   from   xp   where   id=XXXXX';  
  **********************************************  
        try  
              PicQuery   :=   TQuery.Create(Self);  
              PicQuery.DatabaseName   :=   HDBconner.DatabaseName;  
              PicQuery.SQL.Text:=strSql;  
              PicQuery.Open;  
              if   PicQuery.Eof   then   Exit;  
              try  
   
                  TempStream   :=   TMemoryStream.Create;  
                  if   DicQuery.Fields[0].IsNull   then        
                        if   DicQuery.Fields[1].IsNull   then     Exit  
                  else  
                        (DicQuery.FieldByName('JPEG')   as   TBlobField).SaveToStream(TempStream)  
                  else  
                        (DicQuery.FieldByName('BMP')   as   TBlobField).SaveToStream(TempStream);  
  *****************************************************************  
                  strTemp   :=   ExtractFilePath(paramstr(0));  
   
                  if   not   Unit_ComPressBMP.GetPhotoAndSaveFile(strTemp,   TempStream,intCompress)   then  
                            Exit;  
                  Result   :=   True;  
              finally  
                    TempStream.Free   ;  
                    TempStream   :=   nil;  
              end;  
   
              if   not   Result   then   Exit;  
   
              if   not   Unit_ComPressBMP.CompressImage(strTemp,   true,   intCompress)   then  
                        Exit;  
   
              Result   :=   True;  
        finally  
              PicQuery.Active   :=   False;  
              FreeAndNil(PicQuery);  
        end;  
  end;  
 

查看回复