使用ClientDataSet.StatusFilter := [usDeleted]时遇到一些困难。
它什么也没做。我将ClientDataSet连接到提供程序。
应用StatusFilter时,数据集不显示已删除的记录。
它只是在应用StatusFilter之前显示记录。

另一方面。如果使用未连接到提供程序的ClientDataSet.CreateDataSet,而仅将ClientDataSet用作内存中的DataSet,则StatusFilter的工作方式如文档中所述。
数据集仅显示已删除的记录。
ClientDataSet.UpdateStatus还显示正确的状态usDeleted。

我可以获取连接到提供程序以显示已删除记录的第一个ClientDataSet的唯一方法是使用ClientDataSet.Delta属性。但这不允许我还原已删除的记录。

//Note: cds.LogChanges = true
cds := TClientDataSet.Create(nil);
cds.Data := MyClientDataSet.Delta;
cds.First;

while not cds.eof do
begin
  case cds.UpdateStatus of
    usModified:
      begin
        ShowMessage('Modified');
        cds.RevertRecord;
      end;
    usInserted: ShowMessage('Inserted');
    usDeleted: ShowMessage('Deleted');
  end;

  cds.Next;
end;

cds.Free;


我究竟做错了什么?

最佳答案

您描述的代码

ClientDataSet1.StatusFilter := [usDeleted];


是在当前ClientDataSet视图中仅包含那些已删除记录的正确方法。我不明白为什么它对您不起作用,因为我一直在代码中使用这种方法,而且这种方法从未失败过。我唯一想到的是,您可能在设置StatusFilter属性之前调用了ApplyUpdates或CancelUpdates,或者您可能已将LogChanges设置为False(默认为True)。

顺便说一句,要取消状态过滤器,请将其设置为空集,如下所示:

ClientDataSet1.StatusFilter := [];


这将包括视图中插入,修改和未修改的记录。删除的记录将不会出现在当前视图中。

关于delphi - ClientDataSet上的StatusFilter,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7671205/

10-09 09:33