![]() |
#1 |
Участник
|
Здравствуйте.
Как можно сбросить все фильтры, установленные для таблицы, кроме фильтра, установленного с помощью MARK? Неужели нужно перебирать все поля SETRANGE(FieldN)? |
|
![]() |
#2 |
Moderator
|
Это сложно?
|
|
![]() |
#3 |
Участник
|
Я думаю, что есть еще один вариант:
допустим есть табличка Rec1 у которой установлены фильтры (в т.ч. и фильтр MARK) Создаем Rec2 того же типа, что и Rec1. Делаем : Rec2 := COPY(Rec1); Rec1.RESET; Rec2.MARKONLY(TRUE); IF Rec2.FIND('-') THEN REPEAT Rec1.GET(Rec2.xxx, Rec2.xxx); Rec1.MARK(TRUE); UNTIL Rec2.NEXT = 0; |
|
![]() |
#4 |
Участник
|
Цитата:
Сообщение от Taras
![]() Я думаю, что есть еще один вариант:
допустим есть табличка Rec1 у которой установлены фильтры (в т.ч. и фильтр MARK) Создаем Rec2 того же типа, что и Rec1. Делаем : Rec2 := COPY(Rec1); Rec1.RESET; Rec2.MARKONLY(TRUE); IF Rec2.FIND('-') THEN REPEAT Rec1.GET(Rec2.xxx, Rec2.xxx); Rec1.MARK(TRUE); UNTIL Rec2.NEXT = 0; |
|
![]() |
#5 |
Moderator
|
Сброс фильтров - более правильное решение. Скорость работы не будет зависить от количества marked-записей
|
|
![]() |
#6 |
Участник
|
В общем, нашел еще два варинта:
1. Скопировать фильтры с помощью COPYFILTERS из другой переменной, на которую заведомо не наложено никаких фильтров. 2. Сбросить фильтры с помощью SETVIEW. |
|
![]() |
#7 |
Участник
|
Еще вариант - использовать GETFILTERS.
Потом пробегаться уже не по всем полям, а только по тем, на которые наложен фильтр.
__________________
С уваженем, rootadmin |
|