Рекурсия в Tfrxodbcquery

отредактировано June 2014 Раздел: FastReport 4.0
Приветствую.
Может кто сталкивался с ошибкой возникающей в процессе выполнения запроса.
; with Q as
(
select ...
from 
)

, CTE (<fields>) AS
(
	SELECT ...
	FROM Q
	
	UNION ALL
	
	SELECT ...
	FROM Q AS D
		JOIN CTE C ON C.ID = D.PAR
	where C.ID <> 0
)

SELECT  <fields>
FROM CTE
ORDER BY ...

Комментарии

  • Stalker4Stalker4 123
    отредактировано 23:48
    humanity написал: »
    Приветствую.
    Может кто сталкивался с ошибкой возникающей в процессе выполнения запроса.
    А причем тут FR ? Судя по ошибке, это ошибка на SQL-сервере.
  • отредактировано 23:48
    Stalker4 написал: »
    А причем тут FR ? Судя по ошибке, это ошибка на SQL-сервере.
    Ошибки в коде нет. Т.к. в Management Studio работает.
    Ну ок. Перепишем вопрос.
    Как в FR воспользоваться рекурсией основанной на наборах данных. Рекурсивные CTE ?

    p.s. FastReport 5.0.4 та же ошибка.
  • отредактировано 23:48
    судя по всему, рекурсия тут не причем.
    А дело в использовании common table expressions(CTE).
    Вопрос: как использовать CTE в Tfrxodbcquery ?
  • PNPPNP
    отредактировано 23:48
    Может быть в настройках подключения что-то не так? Клиентская либа, например, не той версии.
    Ну и решить можно закатав СТЕ в хп, и в отчете дерагть уже ее
  • отредактировано 23:48
    PNP написал: »
    Может быть в настройках подключения что-то не так? Клиентская либа, например, не той версии.
    По этому поводу ничего сказать не могу, т.к. в настройке не имею отношения.
    Используется драйвер ODBC.
    PNP написал: »
    Ну и решить можно закатав СТЕ в хп, и в отчете дерагть уже ее
    Да, но это повлечет за собой создание объекта базы данных, что в данном случае неудобное решение.
    Можно еще использовать pascal script, что бы работать с данными на уровне строк, тоже неудобное решение.

    Очень хочется заставить работать CTE и выполнять часть работы с данными на сервере.
  • Stalker4Stalker4 123
    отредактировано 23:48
    humanity написал: »
    Ошибки в коде нет. Т.к. в Management Studio работает.
    Это не аргумент, так как неизвестно посредством чего и каких настроек Management Studio работает с SQL-сервером. Попробуйте этот свой запрос выполнить в самой Delphi в через TADOQuery или TQuery или чем Вы там из Delphi ходите к своему SQL-серверу.
  • отредактировано 23:48
    Stalker4 написал: »
    Это не аргумент, так как неизвестно посредством чего и каких настроек Management Studio работает с SQL-сервером. Попробуйте этот свой запрос выполнить в самой Delphi в через TADOQuery или TQuery или чем Вы там из Delphi ходите к своему SQL-серверу.
    Это говорит о том что сервер обрабатывает запрос корректно и что он составлен правильно.
    Дело в том, что FR встроен в ПО и хожу к SQL-серверу посредством подключения которое установило ПО.
    Использовать могу только Tfrxodbcquery.
    Да, рекурсия не играет никакой роли. Любой запрос CTE вызывает туже ошибку.
    ИМХО, "в чем дело?" может ответить только разработчик.

Оставить комментарий