【发布时间】:2013-08-13 20:01:33
【问题描述】:
大约在运行 D5 程序的一百次中,它会抛出“无效的书签”错误。在错误消息对话框中单击“确定”会越过它,系统运行正常。
这个应用程序中有大约 20 个 TDBGrids,并且所有这些都在显着点都有“清除”以清除书签。有 17 个数据集。
因为它非常罕见,而且我怀疑是因为用户在关闭之前做了一些事情(不是他们的错),所以很难找到并修复它。
我是否可以在启动时批量清除所有数据集中的所有书签?
我一直在这里读到,书签应该在“打开/关闭”时被清除,并且所有数据集都在启动时打开。
If Table1.Active then Table1.Close; // They should never be Active but...
Table.Open;
有什么想法吗?
谢谢
【问题讨论】:
-
书签是用来指向记录的内存结构。它们不是持久的,因此实际上每次关闭数据集时它们都会被清除。我怀疑您的问题是,当删除记录时,仍然会为其创建一个书签,并且数据集将保留对该记录的无效引用。在旧版本的 Delphi 中,程序员仍然负责在不再需要时调用 TDataset.FreeBookmark 来处理书签。程序员还负责在记录从数据集中删除之前将其设置为书签。
-
@AlexSC:确实。 D5 OLH 中的“标记和返回记录”并没有说明当数据集关闭时它们变得无效。 Imo,如果 OP 想要在那之后返回记录,那么通过唯一键获取它会更安全。