2013-05-07 39 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。