我在使用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;
我做错了什么?
答案 0 :(得分:0)
您描述的代码
ClientDataSet1.StatusFilter := [usDeleted];
是在当前ClientDataSet视图中仅包含已删除的记录的正确方法。我不明白为什么它不适合你,因为我一直在我的代码中使用这种方法,它从未失败过。我唯一能想到的是你可能在设置StatusFilter属性之前调用了ApplyUpdates或CancelUpdates,或者你可能将LogChanges设置为False(它的默认值为True)。
顺便说一句,取消状态过滤器将其设置为空集,如下所示:
ClientDataSet1.StatusFilter := [];
这将在您的视图中包含插入,修改和未修改的记录。删除的记录不会出现在当前视图中。