首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Delphi中将TMyQuery数据集转换为TClientDataSet

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

Stack Overflow用户
提问于 2009-01-01 15:37:30
回答 1查看 5K关注 0票数 2

我使用devart (corelab)的Mydac组件从Delphi访问MySql (2006)我经常需要处理TClientDataSet中的数据将TMyQuery的数据集转换为TClientDataSet的最佳方法是什么目前我正在使用

代码语言:javascript
复制
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;

有没有更好的方法来做这件事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-01-01 16:29:14

如果你确实经常需要它,那么就把它变成一个函数,如下所示:

代码语言:javascript
复制
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组件,所以我不能测试。代码可能包含错误,但总体思路是可行的。)

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/405065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档