![](/img/trans.png)
[英]How I get the new Field Value from a TClientDataset in Delphi?
[英]How I can get the changes of a TClientDataset to another TClientDataset?
如何从TClientDataset
获得更改?
我有一个名为GetDataset
的TClientDataset
,我有一个网格。 我想要在名为ChangeDataset
的新TClientDataset
ChangeDataset
。
我怎样才能做到这一点?
如果您有源ClientDataSet CDS1,您应该能够通过执行将更改的记录复制到第二个ClientDataSet CDS2
if CDS1.ChangeCount > 0 then
CDS2.Data := CDS1.Delta;
正如您将看到的那样,它会为您提供“之前”记录和带有更改的记录。 这可能不一定是你想要的 - 坦率地说,你最好阅读评论和OLH中发布的Whipple文章,以获得你可能希望实现的确切结果。 关键是,您需要的所有信息都在源CDS中,直到您将其清除(通过调用ApplyUpdates() - 之后,如果成功,则更改日志为空)。
如果你看一下CDS2中的行,你不知道如何判断某个特定字段是否包含一个已更改的值,以及如何区分一个只有空的一个。 很久以前,Istr在他的Mark Terdington的一个Borland NTTP新闻组中有一篇非常好的帖子,我想,解释如何做到这一点。 基本上,这是在字段的NewValue属性上评估VarIsClear的问题:
if VarIsClear(CDS2.Fields[i].NewValue) then
// means Fields[i] does not have a changed value
顺便说一下,既然你可以将CDS的状态保存到XML,你就可以使用XML操作,例如使用DOM解析器,例如Windows内置的(见MSXML.Pas),可以很容易地做很多很麻烦的事情。 TDataSet范例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.