很简单,就是生成临时的dataset,用完后,还要释放,所以是两个函数。
class procedure SQLHelper.ExecuteNonQuery(conn: TADOConnection;
strSQL: string);
var
query : TADOQuery;
begin
query := TADOQuery.Create(nil);
query.Connection := conn;
query.SQL.Clear;
query.SQL.Add(strSQL);
query.ExecSQL;
query.Close;
query.Free;
query := nil;
end;class procedure SQLHelper.ReleaseDataSet(ds: TDataSet);
begin
{ if ds.Active then
ds.Close;
ds.Free;
ds := nil; }
if ds.Active then //因为批量复制中未选择复制时出现问题,修改
begin
ds.Close;
ds.Free;
ds := nil;
end;
end;使用时:
var ds: TDataSet; strSQL := '……';
try
ds := SQLHelper.ExecuteDataSet(adoconnMain,strSQL);
……
finally
SQLHelper.ReleaseDataSet(ds);
end;但心里对这个释放函数一直觉得不踏实,不知是否真能释放掉,所以请大家帮看看,如果不对,怎么改好,谢谢。
class procedure SQLHelper.ExecuteNonQuery(conn: TADOConnection;
strSQL: string);
var
query : TADOQuery;
begin
query := TADOQuery.Create(nil);
query.Connection := conn;
query.SQL.Clear;
query.SQL.Add(strSQL);
query.ExecSQL;
query.Close;
query.Free;
query := nil;
end;class procedure SQLHelper.ReleaseDataSet(ds: TDataSet);
begin
{ if ds.Active then
ds.Close;
ds.Free;
ds := nil; }
if ds.Active then //因为批量复制中未选择复制时出现问题,修改
begin
ds.Close;
ds.Free;
ds := nil;
end;
end;使用时:
var ds: TDataSet; strSQL := '……';
try
ds := SQLHelper.ExecuteDataSet(adoconnMain,strSQL);
……
finally
SQLHelper.ReleaseDataSet(ds);
end;但心里对这个释放函数一直觉得不踏实,不知是否真能释放掉,所以请大家帮看看,如果不对,怎么改好,谢谢。
class procedure SQLHelper.ExecuteNonQuery(conn: TADOConnection;
strSQL: string);
var
query : TADOQuery;
begin
query := TADOQuery.Create(nil);
try
query.Connection := conn;
query.SQL.Clear;
query.SQL.Add(strSQL);
query.ExecSQL;
query.Close;
finally
query.Free;
query := nil;
end;
end;class procedure SQLHelper.ReleaseDataSet(ds: TDataSet);
begin
if ds.Active then //因为批量复制中未选择复制时出现问题,修改
begin
try
ds.Close;
finally
ds.Free;
ds := nil;
end;
end;
end;
来处理异常,这样 无论是否发生异常 都会释放掉~
class procedure SQLHelper.ReleaseDataSet(var ds: TDataSet);
class function SQLHelper.ExecuteDataSet(conn: TADOConnection;
strSQL: string): TDataSet;
var
query : TADOQuery;
begin
query := TADOQuery.Create(nil);
query.Connection := conn;
query.SQL.Clear;
query.SQL.Add(strSQL);
query.Open;
result := query;
end;
对呀,我就是担心是不是真的能释放掉,dataset类型本身就是个值引用吧?
谢谢bluekitty。