title: TClientDataSet.AppendData cause "Trying to append data to a non-partial dataset" error
body: <p>When execute the following code:</p>
  
  <pre><code>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;
  </code></pre>
  
  <p>An exception prompt "Trying to append data to a non-partial dataset".</p>
  
  <p>However, the following code works:</p>
  
  <pre><code>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;
  </code></pre>