This is topic Вызов функций MSSQL in forum Работа с приложениями (ODBC-SQL/OPC/DDE) at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/41/t/000088.html

Posted by DmFM (Участник № / Member № 6479) on :
 
Написал хранимую функцию возвращающую 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 :
 
Вопросы об использовании хранимых процедур неоднократно обсуждались в форуме (например, http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/41/t/000079.html#000000 и др.).

Ваши запросы работать не будут как минимум из-за отсутствия 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 будут дынные только последней из записей.
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2