Delphi ADO + 书签

3

我目前正在开发一个可以动态使用数据库的应用程序。

也就是说,它被设计成可以随时使用任何数据库和数据结构。

我的问题是,我希望能够“标记”或者书签某些记录,因此我需要使用Filter属性进行一些搜索,在最后,我希望删除过滤器,并且能够搜索到已经标记的记录...

然而,似乎书签只在指定的过滤器上设置有效,所以如果我选择了第二个书签项目,我会收到完全不同于预期的记录,即我做了一个过滤器并将第一条记录加为书签,当我删除过滤器并转到书签#1时,我仍然只能看到记录编号1。

是否有其他方法可以实现这一点?还是必须以不同的方式实现?

希望这里有人有一个真正疯狂的解决方案 :)

1个回答

4
Delphi中的数据集只能标记一个记录。TDataset.BookMark是该标记记录的占位符。在数据集被过滤后创建的书签也在过滤器消失后仍然有效。因此,如果您过滤了数据集并创建了一个书签,然后删除了过滤器并转到书签记录,则应该可以到达相同的记录。
如果您不确定书签是否仍然有效,特别是在数据集正在编辑时,请使用TDataset.BookmarkValid方法验证您的书签。
如果您想要一组书签(而不仅仅是一个标记的记录),那么您必须将它们保存在列表或数组中。在Delphi 2009及更高版本中,TBookMark数据类型定义为TBytes。在早期版本中,TBookMark定义为字符串。因此,如果您使用的是Delphi 2009之前的版本,则可以使用TStringList的实例来保存书签列表。如果您使用的是Delphi 2009及以上版本,则可以使用TList泛型类型(在Generics.Collections单元中声明)来存储书签列表。
如果您使用DBGrid,则DBGrid有一个名为SelectedRows的属性,其类型为TBookMarkList。您可以使用它来从网格中选择的行中保存书签列表。您需要在DBGrid的选项中启用多选。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接