首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TClientDataSet.AppendData导致“尝试将数据追加到非部分数据集”错误

TClientDataSet.AppendData导致“尝试将数据追加到非部分数据集”错误
EN

Stack Overflow用户
提问于 2011-12-30 10:14:29
回答 1查看 4K关注 0票数 1

当执行以下代码时:

代码语言:javascript
复制
var S, D: TClientDataSet;
    P: TDataSetProvider;
    i: integer;
begin
  S := TClientDataSet.Create(nil);
  D := TClientDataSet.Create(nil);
  P := TDataSetProvider.Create(nil);
  try
    S.FieldDefs.Add('F1', ftString, 20);
    S.FieldDefs.Add('F2', ftBcd,     2);
    S.FieldDefs.Add('F3', ftBoolean);
    S.CreateDataSet;
    S.AppendRecord(['Test 1', 1, True]);
    S.AppendRecord(['Test 2', 2, False]);
    S.First;
    S.MergeChangeLog;

    D.FieldDefs.Add('F1', ftString, 20); 
    D.FieldDefs.Add('F2', ftBcd,     2);
    D.FieldDefs.Add('F3', ftBoolean);
    D.CreateDataSet;

    P.DataSet := S;
    D.SetProvider(P);
    D.AppendData(P.GetRecords(-1, i, MetaDataOption), False);
  finally
    S.Free;
    D.Free;
    P.Free;
  end;
end;

异常提示“正在尝试将数据追加到非部分数据集”。

但是,以下代码可以正常工作:

代码语言:javascript
复制
var S, D: TClientDataSet;
    P: TDataSetProvider;
    i: integer;
begin
  S := TClientDataSet.Create(nil);
  D := TClientDataSet.Create(nil);
  P := TDataSetProvider.Create(nil);
  try
    S.FieldDefs.Add('F1', ftString, 20);
    S.FieldDefs.Add('F2', ftBcd,     2);
    S.FieldDefs.Add('F3', ftBoolean);
    S.CreateDataSet;
    S.AppendRecord(['Test 1', 1, True]);
    S.AppendRecord(['Test 2', 2, False]);
    S.First;
    S.MergeChangeLog;

    // The 4 lines below that were in the first code sample are omitted here 
    //D.FieldDefs.Add('F1', ftString, 20); 
    //D.FieldDefs.Add('F2', ftBcd,     2);
    //D.FieldDefs.Add('F3', ftBoolean);
    //D.CreateDataSet;

    D.Data := S.Data;  // This line does not appear in the first code sample

    P.DataSet := S;
    D.SetProvider(P);
    D.AppendData(P.GetRecords(-1, i, MetaDataOption), False);
  finally
    S.Free;
    D.Free;
    P.Free;
  end;
end;
EN

回答 1

Stack Overflow用户

发布于 2011-12-30 14:59:07

从您的第一个代码中删除D.CreateDataSet;,您就会很好。在调用CreateDataSet时,dataset似乎不接受任何部分更新。

代码语言:javascript
复制
procedure TForm7.Button3Click(Sender: TObject);
var S, D: TClientDataSet;
    P: TDataSetProvider;
    i: integer;
begin
  S := TClientDataSet.Create(nil);
  D := TClientDataSet.Create(nil);
  P := TDataSetProvider.Create(nil);
  try
    S.FieldDefs.Add('F1', ftString, 20);
    S.FieldDefs.Add('F2', ftBcd,     2);
    S.FieldDefs.Add('F3', ftBoolean);
    S.CreateDataSet;
    S.AppendRecord(['Test 1', 1, True]);
    S.AppendRecord(['Test 2', 2, False]);
    S.First;

    P.DataSet := S;
    D.SetProvider(P);
    D.AppendData(P.GetRecords(-1, i, MetaDataOption), False);
  finally
    S.Free;
    D.Free;
    P.Free;
  end;
end;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8675512

复制
相关文章

相似问题

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