This is topic Получение и передача данных ч/з SQL-запрос. in forum Работа в MS Windows (ODBC/DDE/OPC/NET) / Working under MS Windows at Форум TRACE MODE: техническая поддержка.


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

Posted by Vasilii (Участник № / Member № 1009) on :
 
Создал SQL-запрос для получения и передачи данных в ACCESS. Получение числовых значений проходит нормально, а с текстом проблема. Чтение "текста" происходит один раз и то после того как свернешь/развернешь ТМ.
А посылка не получается совсем. В отчете сообщается ошибка:
SQL:error in ExecDirect:37000
Проект создавал по примеру в HELP.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Трейс Моуд 5 не работает с данными в текстовом формате.
Не можете ли Вы уточнить, что Вы имеете в виду?

В каком примере в HELP идет речь о чтении или посылке "текста"?
 
Posted by Vasilii (Участник № / Member № 1009) on :
 
Из HELP-a
СВЯЗЬ С УСО, контроллерами > Обмен по ODBC > Каналы для обмена по DBC > Получение данных из базы > "Считанные числовые значения присваиваются входным значениям соответствующих каналов. Если считанное значение представляет собой текст, он присваивается атрибуту кодировка соответствующего канала, если ранее данному каналу не были заданы кодировка и комментарий. Текст не может содержать более 127 символов. Присвоенная кодировка может быть просмотрена в динамике с использованием, например, формы отображения Динамический текст."
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Пожалуйста, покажите Ваш файл odbc.cfg - как задавали фрагменты SQL-запросов в нем?
Желательно также привести больше строк из лог-файла ТМ до ошибки "SQL:error in ExecDirect:37000".
 
Posted by Vasilii (Участник № / Member № 1009) on :
 
Здравствуйте! Запрос делал как в примере из HELP.

DSN=test
USER=user
SQL1=SELECT*FROM
HEADER1=Tab
FOOTER1=WHERE field1=#####
SQL2=INSERT INTO Tab

текст лог-файла ТМ

Professional Editional
DRAWSERV 5.12
SUPPORT: NetBios
INFO:Load Starting... D:\Project\Test_SQL\APM.dbb
INFO:Detected NT 5.0
INFO:Found 9 channels
INFO: LoadTime=0.17s CalcPeriod=549ms
ATTACH: default(PicMan)
DDE:starting...
RTM:math kernel starting...
SCREEN load error screen.000
INFO:work mode
INFO: start time is 0.11 s
ODBC:start
SQL:operator is: SELECT*FROM Tab WHERE field1=0
SQL:columns is 1 Код
SQL:columns is 2 field1
SQL:columns is 3 field2
SQL:columns is 4 field3
SQL:columns is 5 field4
SQL:columns is 6 field5
SQL:columns is 7 field6
SQL:columns is 8 field7
SQL:execute: SELECT*FROM Tab WHERE field1=0
ODBC Read
SQL:operator is: INSERT INTO Tab (field4,field5) VALUES(2,0) WHERE field1=#####
SQL:error in ExecDirect:37000
INFO:stoping...
ODBC:stop
DDE:thread stop
INFO: stop time is 2.013 s
INFO:number of calculation = 549
END OF WORK
LINK:unregistrated user Logout
LINK:unregistrated user Logout

Мне требуется из каналов field4 и field5 произвести запись в таблизу базы данных, а из канала field7 получить "код продукта" в текстовом виде.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
1) Похоже, что для повторной макроподстановки Вы не создали канал ПУСТОЙ_SQL-where, поэтому у Вас в SQL-запросе "WHERE field1=#####" - это же ошибка по синтаксису SQL! Или Вы пытаетесь по тому же фрагменту "FOOTER1=WHERE field1=#####" выполнить запрос. Создайте еще один "FOOTER2=" с пустой строкой, чтобы по 2-ке у Вас запрос без этого WHERE выполнялся: "INSERT INTO Tab (field4,field5) VALUES(2,0)".
2) Пробелы также не забывайте между операторами в запросах: "SELECT*FROM", а кроме того - у Вас действительно БД требует авторизации при подключении как user? Если нет - тогда эту строку можно вообще удалить из файла конфигурации.
 
Posted by Vasilii (Участник № / Member № 1009) on :
 
Нельзя ли поподробней. Я не силен в SQL, делал все как в HELP.
1) канал ПУСТОЙ_SQL-where создан - это field1, при равенстве значений этого канала и поля в таблице, производится чтение данных из полей field2 и field3 в соответствующие каналы.
2) Пробелы учел.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
1) Вы когда 1 в другой канал (ПУСТОЙ_SQL Выполнить) посылаете, то ТМ снова берет FOOTER1, а он, я так понимаю, Вам во втором запросе не нужен совсем. Вы создайте еще один FOOTER2=пустой строке, тогда второй запрос инициировать нужно будет посылкой в канал двойки, а не единички.
 
Posted by Vasilii (Участник № / Member № 1009) on :
 
Здравствуйте!
1) Все ок! Спасибо! Запись производится в таблицу, но если таблица открыта, то записи появляются только после следующего открытия таблицы. Это так и должно или что-то с настройками ODBC?
2) А что с чтением данных в текстовом виде? Я писал об этом выше.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
1) Это особенность Access - просто, чтобы увидеть новые записи таблицу необходимо обновить.
2) А кодировка в канале была задана изначально, чтобы он мог принимать текстовые данные из СУБД?
 
Posted by Vasilii (Участник № / Member № 1009) on :
 
2) Нет, кодировку не задавал.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Попробуйте задать.
 
Posted by Vasilii (Участник № / Member № 1009) on :
 
Но в HELP-e пишется, что кодировку задавать не надо.
"Если считанное значение представляет собой текст, он присваивается атрибуту кодировка соответствующего канала, если ранее данному каналу не были заданы кодировка и комментарий."
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Прошу прощения - это я напутал, действительно кодировка не должна быть задана.
Проверил в ТМ5.15 - работает, если у канала не задана кодировка. Только я сомневаюсь, что данная технология Вам подойдет для обмена с БД текстовыми данными, ведь кодировка - разбивается на фрагменты и в итоге в ней Вы все равно получите не то, что в самой БД. Да и подчитывается она только один раз.
 
Posted by Vasilii (Участник № / Member № 1009) on :
 
Т. е. получается то о чем я писал а начале по этому поводу : "Чтение "текста" происходит один раз и то после того как свернешь/развернешь ТМ"?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Да. Но как я уже Вам сказал - все равно этот метод не подходит для работы с текстовыми параметрами из СУБД. ТМ 5-й версии может работать только с числовыми данными.
 
Posted by Vasilii (Участник № / Member № 1009) on :
 
Спасибо за консультацию.
Почему в HELP-e по поводу "текстовых параметров из СУБД" ничего не сказано?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Да это и не ограничения по части обмена с СУБД вовсе, а ограничение самой системы ТМ 5-й версии - она не работает с текстом в принципе.
 


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2