Вверх ↑
Ответов: 4612
Рейтинг: 746
#1: 2018-05-29 14:45:50 ЛС | профиль | цитата
Таблица подцеплена к датасету. В датасете есть свойство SelectSQL - запрос, который выбирает данные. В этом запросе, каким бы он ни был, я добавляю в предложение where ещё одно специальное условие на отдельной строке:
/*Filter*/ 1=1

например:

select
O.ID,
O.DATE_CREATED,
O.TOTAL_COST,
O.COST_PAYED,
O.COST_DEBT,
CU.SHORTNAME as CUSTNAME
from ORDERS O
join CUSTOMERS CU on CU.ID = O.CUSTOMER_ID
where
O.MANAGER = current_user
and
/*Filter*/ 1=1
order by 1 desc

Между символами /**/ получается SQL-комментарий, а условие 1=1 никак не влияет на мой запрос.
Таблица при включении фильтра берёт специальные выражения для каждого столбца, парсит их и составляет правильное предложение в where. Затем она в SelectSQL ищет строку, которая начинается с маркера /*Filter*/ и заменяет строку "/*Filter*/ 1=1" на, например, "/*Filter*/ (O.COST_DEBT > 0) and (CU.SHORTNAME = 'ваня')". После этого датасет переоткрывается с выдачей только подходящих данных. Если фильтр отключен либо пустой, то в запрос опять вставляется "/*Filter*/ 1=1". Каждый столбец таблицы связан с каким-то полем датасета, откуда таблица и знает названия столбцов, которые нужно подставить в where.
карма: 26

0
Редактировалось 2 раз(а), последний 2018-05-29 14:53:21