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