【发布时间】:2014-11-24 19:21:03
【问题描述】:
所以我有一个带有嵌套详细信息 (cdsD1) 的 ClientDataset (cdsM1)。我需要在 ApplyUpdates 之前打印它,所以我克隆它们(cdsMclone 和 cdsDclone)并过滤主克隆,只显示一个主记录。
打印后,我需要更新记录。起初我尝试过这样的事情:
cdsMclone.Edit;
cdsMclone.FieldByName('DATEPRINTED').AsString := Now;
cdsMclone.Post;
cdsMclone.ApplyUpdates(0);
但是在此之后,如果我在源客户端数据集中更改任何内容,cdsM1.ApplyUpdates(0) 会产生冲突(我的意思是您应该在OnReconcileError 中回复)。但是这个不应该显示给用户。此外,使用这种方法,我至少向数据库发送了两个请求。
一种解决方法是使用CloneSource 属性。示例:
cdsMclone.CloneSource.Edit;
cdsMclone.CloneSource.FieldByName('DATEWASPRINTED').AsString := Now;
cdsMclone.CloneSource.Post;
这样,我就可以毫无顾虑地拨打cdsM1.ApplyUpdates(0)。但我真的不喜欢这个。似乎代码正在改变它不应该直接做的事情。另外,如果将来我需要更改嵌套细节中的某些内容,代码会是什么样子?
还有其他方法可以将克隆的客户端数据集的更改返回到源吗?
【问题讨论】:
标签: delphi delphi-xe tclientdataset