2013-05-07 5 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

ответ

1

Ваше предположение верно, запись больше не «там».

Оберните GotoBookmark в попытке/исключить и решить, что делать в случае исключения, например. перейти к первой записи.

Кроме того, вы можете перейти к «ближайшей» записи, которую вы можете найти. Это зависит от того, что вы считаете «ближайшим», и тогда вам вообще не понадобятся закладки и использование, например. FindNearest.

Смежные вопросы