从TClientDataSet的三角洲跟踪修改的行和手动更新
-
26-09-2019 - |
题
有没有办法手动跟踪做一个的ClientDataSet的增量变化和手动更新上则db的变化。我是动态创建的ClientDataSet和同出一提供商,我能够用TQuery的加载它,现在用户将做在光盘上提供,并在最后阶段,这些数据的数据的一些INSERT,UPDATE和DELETE操作(修改)应该是张贴到数据库使用的TQuery(未应用更新)..
解决方案
从TQuery的呼MergeChangeLog
填充你的数据集,以便记录不站出来为新插入,并确保LogChanges
是集之后。
然后,当在最后阶段,随着数据集更新查询之前,集StatusFilter
因此只有要采取行动的记录应该显示。例如;
ClientDataSet1.StatusFilter := [usDeleted];
您也可以使用记录UpdateStatus
,看它是否已被修改等。
但要注意的是,似乎是将有创纪录的多个版本,并且这是一个有点难以理解的“更改日志”如何跟踪。并有也可以是在记录多个动作,像修改了几次,然后将其删除。
其他提示
Change:= TPacketDataSet.create;
Change.Data:= YourClientDataSet.Delta;
while not Change.Eof do
begin
Change.InitAltRecBuffers(False);
if Change.UpdateStatus = usUnmodified then
Change.InitAltRecBuffers(True);
case Change.UpdateStatus of
usModified: ;//your logic read codes in Provider.pas for further hint
usInserted: ;//your logic read codes in Provider.pas for further hint
usDeleted: ;//your logic read codes in Provider.pas for further hint
end;
Change.Next;
end;
以上应该不管工作数目的改性 干杯 范
不隶属于 StackOverflow