使用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/