我需要一个能返回数据集的函数,如下://执行 SQL 语句返回数据集
function TForm_Main.OpenSQL(SQL:string):TDataSet;
begin
var
ADOQuery:TADOQuery;
ReturnDataSet:TDataSet;
begin
//下面联数据库
Result:=-1;
with DM do
begin
ADOQuery:=TADOQuery.Create(nil);
ADOConnection.Connected:=true;
ADOQuery.ConnectionString:=ADOConnection.ConnectionString;
ADOQuery.SQL.clear;
ADOQuery.SQL.Add(SQL);
ADOQuery.Open; //如果返回 表明没有更新数据,此时返回假
ReturnDataSet:=TDataSet.Create(nil);
ReturnDataSet.Copy(ADOQuery);
ADOQuery.Close
ADOConnection.Connected:=false;
ADOQuery.Free;
//在这个地方我要 free ReturnDataSet 么?
end;
end; 请问,这个局部的 ReturnDataSet 用释放么?怎么释放?
function TForm_Main.OpenSQL(SQL:string):TDataSet;
begin
var
ADOQuery:TADOQuery;
ReturnDataSet:TDataSet;
begin
//下面联数据库
Result:=-1;
with DM do
begin
ADOQuery:=TADOQuery.Create(nil);
ADOConnection.Connected:=true;
ADOQuery.ConnectionString:=ADOConnection.ConnectionString;
ADOQuery.SQL.clear;
ADOQuery.SQL.Add(SQL);
ADOQuery.Open; //如果返回 表明没有更新数据,此时返回假
ReturnDataSet:=TDataSet.Create(nil);
ReturnDataSet.Copy(ADOQuery);
ADOQuery.Close
ADOConnection.Connected:=false;
ADOQuery.Free;
//在这个地方我要 free ReturnDataSet 么?
end;
end; 请问,这个局部的 ReturnDataSet 用释放么?怎么释放?
2)在注释的地方不用释放,否则外部无法使用这个返回值。
如果这样:
ResultDataSet := TTable.Create(Application);
那么ResultDataSet地释放由Application完成,你不用操心。
另外需要Result := ResultDataSet;
谢谢chechy(简简单单的活)
1. 你的意思是不能返回 TDataSet 对么?
2. 请问 ADOQuery:=TADOQuery.Create(nil); 写,后面不用 self 对么?
这样以来是由谁来势放的?
ReturnDataSet:=TDataSet.Create(nil);
2)如果Create中参数是nil,这是允许的,但是释放要有你自己完成,否则就有内存泄漏。