gpt4 book ai didi

delphi - ClientDataSet 上的 StatusFilter

转载 作者:行者123 更新时间:2023-12-02 15:52:41 26 4
gpt4 key购买 nike

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

另一方面。如果我使用未连接到提供程序的 ClientDataSet.CreateDataSet 且仅使用 ClientDataSet 作为内存中的数据集,则 StatusFilter 的工作方式如文档中所述。
DataSet仅显示已删除的记录。
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 View 中仅包含那些已删除的记录的正确方法。我不明白为什么它不适合你,因为我一直在我的代码中使用这种方法并且它从未失败过。我唯一能想到的是,您可能在设置 StatusFilter 属性之前调用了 ApplyUpdates 或 CancelUpdates,或者您可能将 LogChanges 设置为 False(默认值为 True)。

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

ClientDataSet1.StatusFilter := [];

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

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com