2013-05-07 42 views
0

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

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

当得到执行,一个EDBEngineError提高了消息“找不到记录”。我的解释是书签功能没有考虑到过滤器和程序GotoBookmark搜索dbgrid中不存在的记录(由于应用了过滤器)。有没有办法使用书签与过滤器?

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

+0

如果GotoBookmark无法找到记录,您会期望什么样的行为,因为它是一个不是函数的过程? – bummi 2013-05-07 08:24:28

回答

1

你的假设是正确的,记录不再是'那里'。

将GotoBookmark包裹在try/except中,并决定在例外情况下如何处理,例如去第一个记录。

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