【问题标题】:Coverting a TMyQuery dataset to TClientDataSet in Delphi在 Delphi 中将 TMyQuery 数据集覆盖到 TClientDataSet
【发布时间】:2010-09-29 03:17:19
【问题描述】:

我利用 devart (corelab) 的 Mydac 组件从 Delphi (2006) 访问 MySql 我经常需要处理 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;

有没有更好的方法?

【问题讨论】:

    标签: delphi devart mydac


    【解决方案1】:

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

    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 组件,所以无法测试。代码可能包含错误,但总体思路可行。)

    【讨论】:

    • +1 表示您将帮助对象链接到 TClientDataSet 的方式
    • 完成。由于我只是从问题中复制了您的代码,因此也请编辑您的问题 - 它同时具有 MyQuery.Open() 和 Cds.Open()。
    猜你喜欢
    • 1970-01-01
    • 2013-07-29
    • 2023-04-08
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多