Форум по Delphi программированию



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.01.2023, 15:38
NEW_Squamis NEW_Squamis вне форума
Прохожий
 
Регистрация: 11.01.2022
Сообщения: 2
Версия Delphi: Delphi 11
Репутация: 10
По умолчанию Delphi + FireDAC + Postgres

Всем привет!
Возникла проблема с использованием запросов в TFDQuery.
Когда имя таблицы содержит два символа '$', то TFDQuery не отображает список параметров в запросе. Вот пример (таблица vdata."wares$rules$link"). Если использовать макросы по подмене текста, то работает. Но не хочется такие элементарные вещи оборачивать через макросы.

Код:
with tjWLL   as (select
                      wrl.fldidxwarerule as fldidxwarerule,
                      json_agg(wll.*)    as "WARESRULESLINKS"
                  from
                      vdata."wares$rules"                 wrl
                      inner join vdata."wares$rules$link" wll on (wrl.fldidxwarerule = wll.fldidxwarerule)
                  where
                          (wll.fldidxwarerule = any(:fldidxwarerule) or (case when :fldidxwarerule = '{}' then True else False end))
                      and :IsWLL
                  group by
                      wrl.fldidxwarerule
                 ),
tjWRL        as (select
                      wrl.*,
                      wll."WARESRULESLINKS"
                  from
                      vdata."wares$rules" wrl
                      left  join tjWLL    wll on (wrl.fldidxwarerule = wll.fldidxwarerule)
                  where
                         wrl.fldidxwarerule = any(:fldidxwarerule)
                      or case when :fldidxwarerule = '{}' then True else False end
                 )
select
    json_build_object('WARESRULES', to_json(tjWRL)) as "WARESRULES"
from
    tjWRL

P.S. Переименовывать таблицы - уже поздно, живой проект.
Ответить с цитированием
  #2  
Старый 07.01.2023, 04:12
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,868
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Видимо, какая-то специфика парсинга запроса.
Варианты обхода:
1. Создать параметры "руками".
2. Создать вью, а уже из нее селектить с параметрами.
Ответить с цитированием
  #3  
Старый 09.01.2023, 11:54
NEW_Squamis NEW_Squamis вне форума
Прохожий
 
Регистрация: 11.01.2022
Сообщения: 2
Версия Delphi: Delphi 11
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Видимо, какая-то специфика парсинга запроса.
Варианты обхода:
1. Создать параметры "руками".
2. Создать вью, а уже из нее селектить с параметрами.

1. Даже при ручном создании - ругается
2. Ой как не люблю вьюшки, но наверное придется.

Спасибо!

P.S. Может кто-то еще предложит варианты
Ответить с цитированием
  #4  
Старый 13.01.2023, 02:29
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,868
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А проверь-ка на простом запросе, что такая реакция именно на 2 и более символов '$' в имени таблицы. А то есть еще подозрение, что тут скорее на использование одного и того же параметра несколько раз.

ЗЫ. Ну и сами запросы, как мне кажется, можно упростить. Для начала, можно избавиться от case'ов. Они, как мне кажется, просто не нужны.

Код:
case when :value = '{}' then true else false end
тоже самое, что просто
Код:
:value = '{}'
Да и
Код:
any(:value)
тоже, вроде, всегда долдно возвращать true.
Если только ты не пихаешь в параметр запрос в текстовом виде, но такое тоже не должно работать.
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:18.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter   Ссылка на Telegram