ClientDataSet上的StatusFilter

时间:2011-10-06 07:12:42

标签: delphi dataset delphi-2006

我在使用ClientDataSet.StatusFilter := [usDeleted]时遇到了一些困难 它没有做任何事情。我将ClientDataSet连接到Provider 应用StatusFilter时,DataSet不会显示已删除的记录 它只是在应用StatusFilter之前显示记录。

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

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

//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;

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您描述的代码

ClientDataSet1.StatusFilter := [usDeleted];

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

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

ClientDataSet1.StatusFilter := [];

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