如何从TClientDataset中获得更改?
我有一个名为TClientDataset的GetDataset,还有一个网格。我希望在一个名为TClientDataset的新ChangeDataset中进行更改。
我该怎么做?
发布于 2014-09-05 14:13:37
如果您有一个源ClientDataSet CDS1,则应该能够通过以下操作将更改的记录复制到第二个ClientDataSet CDS2
if CDS1.ChangeCount > 0 then
CDS2.Data := CDS1.Delta;正如您将看到的,如果您尝试这样做,它会给您一个“前”记录和一个与更改(S)。这可能不一定是你想要的-坦率地说,你最好读一读发表在评论和OLH中的惠普尔文章,以得到你想要达到的确切结果。关键是,您需要的所有信息都在源CDS中,直到您将其清空(通过调用ApplyUpdates() --在此之后,如果成功,更改日志将为空)。
如果您查看CDS2中的行,那么如何立即区分某个字段是否包含更改的值,以及如何区分其中的值是否为空,这并不是显而易见的。Istr很久以前在Borland的一个新闻组里有一个很好的帖子,我想是由他们的Mark写的,解释了如何做到这一点。基本上,这是一个在字段的VarIsClear属性上计算NewValue的问题:
if VarIsClear(CDS2.Fields[i].NewValue) then
// means Fields[i] does not have a changed value顺便说一句,由于您可以将CDS的状态保存到XML,所以可以使用XML操作,例如,使用DOM解析器,比如Windows (参见MSXML.Pas),可以轻松地完成许多使用TDataSet范式很麻烦的事情。
https://stackoverflow.com/questions/25687665
复制相似问题