关于嵌套ClientDataSet的问题,

alphax 2003-08-24 10:16:06
我遇到一个关于嵌套的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.
...全文
38 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
alphax 2003-08-24
  • 打赏
  • 举报
回复
刚找到问题所在,
是因为CDSMaster没有纪录,所以CDSDetail插入出错,
谢谢楼上关注
oldcold 2003-08-24
  • 打赏
  • 举报
回复
gz

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧