有没有办法手动跟踪对clientdataset的delta所做的更改,并手动将更改更新到db。我已经动态创建了一个clientdataset,并且我可以使用tquery加载它,现在用户将对cds中可用的数据执行一些插入更新和删除操作,并且在最后阶段这些数据(已修改)应该是使用tquery(不应用更新)发布到数据库..
答案 0 :(得分:5)
从TQuery调用MergeChangeLog
填充数据集后,记录不会像新插入的那样突出,并确保LogChanges
已设置。
然后,在最后阶段,在使用数据集更新查询之前,请设置StatusFilter
,以便只显示要对其执行操作的记录。例如;
ClientDataSet1.StatusFilter := [usDeleted];
您还可以在记录上使用UpdateStatus
来查看它是否已被修改等。
但请注意,似乎会有多个版本的记录,并且有点难以理解“更改日志”如何跟踪。并且记录上也可以有多个操作,例如修改几次然后删除它。
答案 1 :(得分:0)
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;
无论修改数量多少,上面都应该有效 干杯 范