日期:2014-05-18  浏览次数:22227 次

查询报 insufficient memory for this operation
delphi   +   sqlserver
客户端采用sockect连接
每次查询时动态改变所连的服务器及用户,密码
当连接到10个左右时就出现insufficient   memory   for   this   operation错误,
查资料上说有打开的数据库没有关闭,可是怎么关闭呢?

改变连接代码如下
//改变数据库连接
procedure   ModifyConnection(ADataSet:   TDataSet;   const   AConnectionString:   string);
begin
    try
        ADataSet.Active   :=   false;
        ADataSet.Connection.ConnectionString   :=   AConnectionString;  
        ADataSet.Active   :=   true;
    except
        raise   Exception.Create( '连接错误,请检查网络是否正常! ');
    end;
end;

procedure   TCWYC.ProOpenAccountBanlance(iDetailed,   iYear,   iStartPeriod,
    iEndPeriod,   iLevel,iPosted:   Integer;sStartNumber,sEndNumber:   String);
begin
      DataSetKMYECX.Close;
      DataSetKMYECX.Params.ParamByName( '@Detailed ').AsInteger   :=   iDetailed;
      DataSetKMYECX.Params.ParamByName( '@Year ').AsInteger   :=   iYear;
      DataSetKMYECX.Params.ParamByName( '@StartPeriod ').AsInteger   :=   iStartPeriod;
      DataSetKMYECX.Params.ParamByName( '@EndPeriod ').AsInteger   :=   iEndPeriod;
      DataSetKMYECX.Params.ParamByName( '@Level ').AsInteger   :=   iLevel;
      DataSetKMYECX.Params.ParamByName( '@Posted ').AsInteger   :=   iPosted;
      DataSetKMYECX.Params.ParamByName( '@StartNumber ').AsString   :=   sStartNumber;
      DataSetKMYECX.Params.ParamByName( '@EndNumber ').AsString   :=   sEndNumber;
      PreOpenDB(DataSetKMYECX);
end;




------解决方案--------------------
代码没有问题

可以这样
try
PreOpenDB(DataSetKMYECX);
except
raise Exception.Create( '... ');
查看调用PROC的错误


还有,你的过程里是否加了事务,造成表被死锁?
------解决方案--------------------
try
ADataSet.Active := true;
except
on e:exception do
showmessage(e.Message);

先看一下报什么错


var
Temp: TObject;
begin
Temp := TObject(释放对象);
Pointer(释放对象) := nil;
Temp.Free;
end;


释放对象方法
------解决方案--------------------
bde???
注意
HandleShared = True
和 Session

改用 ado