DATASNAP对象的释放
服务端方法:
function TdssmServerMethods.GetDataR(const ASQLStr: string): TDBXReader;
var
aDBXCommand:TDBXCommand;
begin
Result:=nil;
if not sqlconMethods.Connected then
sqlconMethods.Open;
aDBXCommand:=sqlconMethods.DBXConnection.CreateCommand;
try
aDBXCommand.Text:=ASQLStr;
aDBXCommand.CommandType:=TDBXCommandTypes.DbxSQL; //'Dbx.SQL'
Result:=aDBXCommand.ExecuteQuery;
except
//aDBXCommand.Free;
end;
end;
客户端调用
function GetSelectItemParamList(SelectItemParamList:TSelectItemParamList):Boolean;
var
aName:string;
aSelParam:TSelectItemParam;
aSQL:string;
dr:TDBXReader;
begin
Result:=False;
aSQL:='SELECT * FROM TheSelectItems';
dr:=pClientServerMethods.GetDataR(aSQL);
try
if dr <> nil then
begin
while dr.Next do
begin
aName:=dr['SelectItemName'].AsString;
aSelParam.BankCode:=dr['BankCode'].AsString;
aSelParam.TableName:=dr['SelectItemTableName'].AsString;
aSelParam.CanEdit:=dr['CanEdit'].AsBoolean;
if (aName <> '') and (aSelParam.TableName <> '') and (not SelectItemParamList.ContainsKey(aName)) then
begin
SelectItemParamList.Add(aName,aSelParam);
end;
end;
Result:=True;
end;
except //这里不能用finally
dr.Free;
end;
end;
这里的dr不能强制释放,如果这样:
finally
dr.Free;
程序运行中不会出错,但是退出时,在Debug下,提示对象释放错误,当然脱离IDE运行不会提示错误
不强制释放:
except
dr.Free;
就没有这个问题,这是哪里出问题了?