当前位置:  开发笔记 > 后端 > 正文

在Delphi中将TMyQuery数据集转换为TClientDataSet

如何解决《在Delphi中将TMyQuery数据集转换为TClientDataSet》经验,为你挑选了1个好方法。

我使用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;

有没有更好的方法呢?



1> mghie..:

如果你确实经常需要这个,那就把它变成一个函数,就像这样:

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;

这个函数可以在所有地方使用,而不是TClientDataSet.Create(),除非引发异常,否则你将获得一个拥有的开放TClientDataSet,这样也可以释放两个辅助对象.

(注意:我只对MS Sql Server使用DevArt组件,所以我无法测试.代码可能包含错误,但总体思路有效.)

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有