【问题标题】:Using bookmarks with filtered query使用带有过滤查询的书签
【发布时间】:2013-05-07 17:46:40
【问题描述】:

我需要帮助解决以下问题。我有一个 dbgrid,底层查询被过滤。我想应用一个新的过滤器,但在 dbgrid 中保持相同的行号。这是我的代码:

with qrProperties do
begin
  ...
  MyPoint:=GetBookmark;
  Filter:='N<>'+IntToStr(ResultPropertyN);
  Filtered:=True;
  GotoBookmark(MyPoint);
end;

当它被执行时,会引发 EDBEngineError 并显示消息“找不到记录”。我的解释是书签功能不考虑过滤器,并且 GotoBookmark 过程搜索 dbgrid 中不存在的记录(由于应用了过滤器)。有没有办法使用带有过滤器的书签?

这里有更多细节。在我的应用程序中,当我双击 dbgrid 中的一行时,它会消失(由于应用了过滤器),但由于过滤,光标会移动到第一行(如果我不使用书签)。我希望它保持在相同的行号上,以便转到已删除的记录之后立即显示的记录。

【问题讨论】:

  • 如果 GotoBookmark 无法找到记录,你会期待什么样的行为,因为它是一个过程而不是一个函数?

标签: delphi delphi-5


【解决方案1】:

您的假设是正确的,记录不再“存在”。

将 GotoBookmark 包装在 try/except 中并决定在异常中做什么,例如转到第一条记录。

或者,您可以转到您能找到的“最近”记录。这取决于您认为“最近”的内容,然后您根本不需要书签并使用例如查找最近的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多