跟踪修改的行并从TClientDataSet的Delta手动更新

时间:2010-06-12 07:18:34

标签: delphi tclientdataset

有没有办法手动跟踪对clientdataset的delta所做的更改,并手动将更改更新到db。我已经动态创建了一个clientdataset,并且我可以使用tquery加载它,现在用户将对cds中可用的数据执行一些插入更新和删除操作,并且在最后阶段这些数据(已修改)应该是使用tquery(不应用更新)发布到数据库..

2 个答案:

答案 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;

无论修改数量多少,上面都应该有效 干杯 范