Это не в HiAsm, это на "большом" Delphi.
Спасибо
Ответов: 118
Рейтинг: 0
|
|||
Это не в HiAsm, это на "большом" Delphi.
Спасибо |
|||
карма: 0 |
|
Ответов: 2271
Рейтинг: 677
|
|||
Netspirit, а как это работает? У вас таблица с множеством столбцов, в одном столбце в фильтр вы вписываете строку, что происходит с таблицей?
|
|||
карма: 11 |
|
Ответов: 4630
Рейтинг: 749
|
|||
Таблица подцеплена к датасету. В датасете есть свойство 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 |
|||
карма: 26 |
|