Cha*_*iga 2 delphi mydac devart
我使用devart(corelab)的Mydac组件从Delphi访问MySql(2006)我经常需要处理TClientDataSet中的数据什么是将TMyQuery的数据集转换为TClientDataSet的最佳方法目前我正在使用
var
MyQuery : TMyQuery;
Dsp : TDataSetProvider;
Cds : TClientDataSet;
begin
MyQuery := nil;
Dsp := nil;
Cds := nil;
try
MyQuery := TMyQuery.Create(nil);
Dsp := TDataSetProvider.Create(nil);
Cds := TClientDataSet.Create(nil);
MyQuery.Connection := TheConnection;
MyQuery.SQL.Text := CmdStr;
Dsp.DataSet := MyQuery;
Cds.SetProvider(Dsp);
Cds.Open;
////////////////////////////////////////////////////////////////////////
/// MAKE USES OF THE CDS //
////////////////////////////////////////////////////////////////////////
finally
FreeAndNil(Cds);
FreeAndNil(Dsp);
FreeAndNil(MyQuery);
end;
end;
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法呢?
如果你确实经常需要这个,那就把它变成一个函数,就像这样:
function CreateAndOpenClientDataset(AOwner: TComponent;
AConnection: TConnection; ACommand: string): TClientDataSet;
var
MyQuery: TMyQuery;
Dsp: TDataSetProvider;
begin
Result := TClientDataSet.Create(AOwner);
try
MyQuery := TMyQuery.Create(Result);
MyQuery.Connection := AConnection;
MyQuery.SQL.Text := ACommand;
Dsp := TDataSetProvider.Create(Result);
Dsp.DataSet := MyQuery;
Result.SetProvider(Dsp);
Result.Open;
except
Result.Free;
raise;
end;
end;
Run Code Online (Sandbox Code Playgroud)
这个函数可以在所有地方使用,而不是TClientDataSet.Create(),除非引发异常,否则你将获得一个拥有的开放TClientDataSet,这样也可以释放两个辅助对象.
(注意:我只对MS Sql Server使用DevArt组件,所以我无法测试.代码可能包含错误,但总体思路有效.)
归档时间: |
|
查看次数: |
4615 次 |
最近记录: |