我遇到一个关于嵌套的ClientDataSet的问题,至今也弄不明白错在哪里,
请各位同行朋友们帮忙看看好吗?谢谢,能解决问题,分一定给的我编了一个重现错误的Console小程序,如下:program TestNestedCDS;{$APPTYPE CONSOLE}uses
  SysUtils, Classes, DB, DBClient;const
  XMLText =
'<?xml version="1.0" standalone="yes" ?>' + sLineBreak +
'<DATAPACKET Version="2.0">' + sLineBreak +
' <METADATA>' + sLineBreak +
' <FIELDS>' + sLineBreak +
' <FIELD attrname="t1" fieldtype="nested">' + sLineBreak +
' <FIELDS>' + sLineBreak +
' <FIELD attrname="f1" fieldtype="string" WIDTH="10" />' + sLineBreak +
' </FIELDS>' + sLineBreak +
' <PARAMS />' + sLineBreak +
' </FIELD>' + sLineBreak +
' </FIELDS>' + sLineBreak +
' <PARAMS />' + sLineBreak +
' </METADATA>' + sLineBreak +
' <ROWDATA></ROWDATA>' + sLineBreak +
'</DATAPACKET>';  XMLFileName = 'NestedCDS.xml';
var
  L: Integer;
  CDSMaster,
  CDSDetail: TClientDataSet;  Stream: TMemoryStream;begin
  Stream := TMemoryStream.Create();
  try
    L := Length(XMLText);
    Stream.SetSize(L);
    Move(XMLText[1], Stream.Memory^, L);
    Stream.SaveToFile(XMLFileName);
  finally
    Stream.Free;
  end;  CDSMaster := TClientDataSet.Create(nil);
  CDSDetail := TClientDataSet.Create(CDSMaster);  try
  CDSMaster.LoadFromFile(XMLFileName);
  CDSDetail.DataSetField := TDataSetField(CDSMaster.FieldByName('t1'));
  except
    CDSMaster.Free;
    raise;
  end;
  try
    CDSDetail.Insert;
    CDSDetail.FieldByName('f1').AsString := 'Test';
    CDSDetail.Post;    WriteLn('1 - Success');
  except
    on E: Exception do WriteLn('1 - Error: ' + E.Message);
  end;  try
    CDSDetail.Cancel;
    CDSDetail.Insert;
    CDSDetail.FieldByName('f1').AsString := 'Test';
    CDSDetail.Post;    WriteLn('2 - Success');
  except
    on E: Exception do WriteLn('2 - Error: ' + E.Message);
  end;  CDSMaster.Free;  WriteLn('Press enter...');
  Readln;
end.