Вверх ↑
Этот топик читают: Гость
Ответов: 89
Рейтинг: 0
#16: 2018-05-29 12:49:46 ЛС | профиль | цитата
Это не в HiAsm, это на "большом" Delphi.

Спасибо
карма: 0

0
Ответов: 1942
Рейтинг: 627
#17: 2018-05-29 13:04:35 ЛС | профиль | цитата
Netspirit, а как это работает? У вас таблица с множеством столбцов, в одном столбце в фильтр вы вписываете строку, что происходит с таблицей?
карма: 9

0
Ответов: 4347
Рейтинг: 678
#18: 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.

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

0
18
Сообщение
...
Прикрепленные файлы
(файлы не залиты)