Написал хранимую функцию возвращающую VARCHAR в MSSQL. Попытался вызвать ее через SQLQuery, аргумент не получил результат. Пробовал выполнять запрос в форме редактирования запроса (нажал на красного человечка) то же безрезультатно.
Запрос такой:
code:
SELECT dbo.Test() #ARG_001#
Делал еще так:
code:
SELECT GETDATE() #ARG_001#
Это должно работать?
Извиняюсь я не в ту ветку запостил. Надобы в "Работа с приложениями (ODBC-SQL/OPC/DDE) ".
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Ваши запросы работать не будут как минимум из-за отсутствия FROM. Наш парсер ищет столбцы для выборки, опираясь на SELECT и FROM. Т.е. выборка - это выборка, а не способ вызова некоего кода.
Возможные ошибки в реализации SQL-запроса должны быть отмечены в трассировщике ODBC-драйвера.
Posted by DmFM (Участник № / Member № 6479) on :
Т.е. вот такая структура должна работать
code:
SELECT TOP 1 dbo.Test() #ARG_001# FROM Orders
Orders - Таблица такая есть
Забыл еще один эксперимент описать с которого все и началось
code:
SELECT field1+field2 #ARG_001#, field3+field4 #ARG_002# FROM Table
Такой запрос не записал данные в аргументы
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Можно посмотреть в протоколе трассировщика ODBC-драйвера, что он принял от нашего SQL-запроса и что вернул.
Posted by DmFM (Участник № / Member № 6479) on :
Теоретически два запроса из последнего поста должны выполняться и записывать данные в аргумент?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Теоретически оба запроса должны работать.
Конкретно надо исследовать протокол трассировщика ODBC-драйвера, чтобы увидеть, что трассировщик получил от Trace Mode 6, какие ошибки обнаружил и что выдал в ответ.
Posted by DmFM (Участник № / Member № 6479) on :
code:
SELECT TOP 1 dbo.Test() #ARG_001# FROM Orders
Если в функция Test() возвращает короткую строку (порядка 15 символов), значение присваивается аргументу. Если длинную , то нет. Аргумент привязан к Комметарию канала.
code:
SELECT field1+field2 #ARG_001# FROM Table
field1, field2 - строки
Выполняю запрос из браузера запросов, нажимаю на кнопку с человечком. В результате запрос выполняется корректно, но в аргумент значение не записывается. Судя по всему ODBC отрабатывает корректно.
Во втором случае
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
При выполнении запроса из браузера запросов в аргументы ничего не должно поступать. Надо сохранить проект под МРВ и запустить узел под профайлером. Активировать запрос в реальном времени и смотреть результат в аргументах канала CALL.SQL.
В первом запросе Вы смотрели по трассировщику, сколько символов с строке возвращает ODBC-драйвер?
Сколько записей содержит таблица во втором запросе?
Posted by DmFM (Участник № / Member № 6479) on :
quote:Отправитель / Originally posted by AdAstra Technical Support: При выполнении запроса из браузера запросов в аргументы ничего не должно поступать. Надо сохранить проект под МРВ и запустить узел под профайлером. Активировать запрос в реальном времени и смотреть результат в аргументах канала CALL.SQL.
В браузере запросов внизу есть поле. После выполнения запроса там появлюется результат. В случае, если там написано (пишу по памяти) что-то вроде
code:
ARG_00=Результат выборки
то в ARG_00 передана строка "Результат выборки". Если написано
code:
=Результат выборки
то строка "Результат выборки" в аргумент не передается. Вчера много эксперементировал, такая ситуация часто наблюдалась.
Количество записей во втором запросе не припомню, штук 5 может быть.
quote: В первом запросе Вы смотрели по трассировщику, сколько символов с строке возвращает ODBC-драйвер?
Лог трассировщика особо не разглядывал. К сожалению под рукой нет омпьютера с TM6. Проверить не могу.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Проверять надо в реальном времени под управлением профайлера и обязательно анализировать протокол трассировщика. Если в запросе возвращается несколько строк, то в аргументах CALL.SQL будут дынные только последней из записей.