Форум TRACE MODE: техническая поддержка Послать новую тему / Post New Topic  Послать ответ / Post A Reply
мой профиль / my profile авторизация / login | регистрация / register | поиск / search | часто задаваемые вопросы / faq | начало / forum home

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ТЕХНИЧЕСКАЯ ПОДДЕРЖКА / TECHNICAL SUPPORT TRACE MODE 6 » TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version » несколько SQL-запросов подряд

   
Автор / Author Тема / Topic: несколько SQL-запросов подряд
Юрий К.
Junior Member / Новичок
Участник № / Member № 3684


Icon 1 отправлено / posted      Профиль для / Profile for Юрий К.           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Здравствуйте, уважаемая техподдержка.! Не могли бы вы отправить мне пример организации нескольких SQL-запросов подряд в одной программе (с ожиданием выполнения каждого запроса) с реализацией алгоритма : “Если в реальном значении канала Call вызова шаблона связи СУБД появился 0, то запрос выполнен “. Заранее благодарен.
Сообщения / Posts 5 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
IF (ARG_000 == 1) then \\ проверка старта цикла
ARG_006 = 1; \\выполнение первого запроса
ARG_000 = 2; \\ переход на второй запрос
end_if;
IF (ARG_000 == 2) and (ARG_001 == 0) then \\проверка окончания первого запроса
ARG_007 = 1; \\старт второго запроса
ARG_000 = 3; \\ переход на третий запрос
end_if;

и т.д.

Для запуска цикла нужно присвоить ARG_000 = 1.

Сообщения / Posts 17083 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Юрий К.
Junior Member / Новичок
Участник № / Member № 3684


Icon 1 отправлено / posted      Профиль для / Profile for Юрий К.           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Можно по-подробнее, а еще лучше бы пример. Мне нужно, чтобы за один проход программы выполнялось 3 SQL-запроса. Я написал программу:
m1: IF ARG_005 != 0 THEN
goto m1;
END_IF;
ARG_004 = 1; \\ Запрос 1
m2: IF ARG_005 != 0 THEN
goto m2;
END_IF;
ARG_004 = 2; \\ Запрос 2
m3: IF ARG_005 != 0 THEN
goto m3;
END_IF;
ARG_004 = 3; \\ Запрос 3
где
ARG_004 - с База_данных№1:Входное значение,
ARG_005 - с База_данных№1:Реальное значение.
Получилось,что в каждом цикле вызова программы отрабатывается только Запрос 3 - остальные "пролетают"

Сообщения / Posts 5 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Вам был дан полный пример. Берите и пользуйтесь. Подробнее даже не знаем как написать. Старайтесь не использовать операторы GOTO.
Сообщения / Posts 17083 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Юрий К.
Junior Member / Новичок
Участник № / Member № 3684


Icon 1 отправлено / posted      Профиль для / Profile for Юрий К.           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Тогда скажите по привязкам аргументов в вашей программе:
ARG_001(IN,USINT) - Сall База_данных№1:Реальное значение -?
ARG_006(OUT,USINT) - Сall База_данных№1:Входное значение -?
ARG_007(OUT,USINT) - Сall База_данных№1:Входное значение -?

Сообщения / Posts 5 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Да, абсолютно верно.

Если у Вас канал один связи с БД, то Вам хватит одного аргумента (вместо ARG_006 и 007), и приравнивать его к разным запросам

Сообщения / Posts 17083 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Юрий К.
Junior Member / Новичок
Участник № / Member № 3684


Icon 1 отправлено / posted      Профиль для / Profile for Юрий К.           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Да, канал связи с БД один. Спасибо! Буду реализовывать.
Сообщения / Posts 5 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Юрий К.
Junior Member / Новичок
Участник № / Member № 3684


Icon 1 отправлено / posted      Профиль для / Profile for Юрий К.           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Начал реализовывать Ваш алгоритм - и опять столкнулся с трудностями. Как для запуска цикла SQL-запросов присвоить ARG_000 = 1. Я думаю, что нада ее сделать глобальной переменной и привязать к кнопке. Но как это сделать - не знаю!
Сообщения / Posts 5 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Не надо делать глобальной переменной.

Просто аргумент экрана связываете с аргументом програмы.

Сообщения / Posts 17083 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Day13
Junior Member / Новичок
Участник № / Member № 3734


Icon 1 отправлено / posted      Профиль для / Profile for Day13           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Подскажите как сделать чтобы программа запускалась при старте МРВ. Я создал аргумент экрана и установил значение по умолчанию "1", но при старте значение не пересылается в программу. А если делать через кнопку, то все нормально, но такой вариант не подходит.
Сообщения / Posts 8 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Вам нужно поставить галочку отработать.
Сообщения / Posts 17083 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
FiXiZ
Active Forum Member / Активный участник форума
Участник № / Member № 5069


Icon 1 отправлено / posted      Профиль для / Profile for FiXiZ           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Здравствуйте!
По мотивам примеров выше написал подобный скрипт, но, в отличие от приера, он запускается сам каждую минуту. Текст скрипта:
IF (Номер_исп_запроса == 1) then
_DBASE__Запись_данных_OUT = 1;
Номер_исп_запроса = 2;
Счетчик_циклов = _DBASE__Запись_данных_R_In;

repeat
Счетчик_циклов = _DBASE__Запись_данных_R_In;
until (Счетчик_циклов!=0) end_repeat;
end_if;

IF (Номер_исп_запроса == 2) and (_DBASE__Запись_данных_R_In==0) then

_DBASE__Запись_данных_OUT2 = 2;
Номер_исп_запроса = 3;
Счетчик_циклов = _DBASE__Запись_данных_R_In;

repeat
Счетчик_циклов = _DBASE__Запись_данных_R_In;
until (Счетчик_циклов!=0) end_repeat;
end_if;
и т.д.

Дело в том, что ни пример выше, ни любые модификации моего скрипта у меня не работают как нужно. В любом случае происходит выполнение последнего запроса, в независимости сколько их всего. Что же я делаю не так? mysql 5.0

Сообщения / Posts 70 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Ошибка состоит в том, что оператор repeat здесь применять нельзя, т.к. в ходе выполнения программы аргумент _DBASE__Запись_данных_R_In не изменяется.
Наши рекомендации от 25.06.2009 - рабочие.
Видимо, в реализации его Вы допустили ошибки.
Пришлите, пожалуйста, на hotline3@adastra.ru Ваш пример проекта реализации НАШИХ рекомендаций с пояснениями.

Сообщения / Posts 17083 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
FiXiZ
Active Forum Member / Активный участник форума
Участник № / Member № 5069


Icon 1 отправлено / posted      Профиль для / Profile for FiXiZ           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Отправил
Сообщения / Posts 70 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Пример проекта с программой, реализующей последовательное выполнение запросов, выслан Вам на почту.

Код программы:

Case Счетчик of
1: In_Запрос_1= 1; Счетчик = 2;
2: If R_Запрос_1 == 0 then In_Запрос_2 = 1; Счетчик = 3; end_if;
3: If R_запрос_2 == 0 then In_Запрос_3 = 1; Счетчик = 0; end_if;
End_case;

Для выполнения запросов нужно задать аргументу «Счетчик» значение 1.

Сообщения / Posts 17083 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
FiXiZ
Active Forum Member / Активный участник форума
Участник № / Member № 5069


Icon 1 отправлено / posted      Профиль для / Profile for FiXiZ           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
В данном примере при изменении переменной «Счетчик» на 1, выполняется только 1-ый запрос, остальные не проходят!
Сообщения / Posts 70 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Проверил проект. Должны последовательно выполняться 3 запроса.

Чтобы убедиться, что у Вас выполнятся только первый запрос, проделайте следующее:
Поставьте флаг "Отладка" для каналов вызова шаблонов связей с СУБД. В папке узла проекта создайте cnf-файл с ключом DEBUG=40000 ( для релиза 6.07.7 ). Далее запустите проект и нажмите на кнопу "Выполнить запросы". После этого остановите проект и отправьте на hotline3@adastra.ru файл протокола профайлера и файл tm6_log.txt.

Если Вы работаете не в релизе 6.07.7, то в cnf-файле поставьте ключ DEBUG=2000.

Сообщения / Posts 17083 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
FiXiZ
Active Forum Member / Активный участник форума
Участник № / Member № 5069


Icon 1 отправлено / posted      Профиль для / Profile for FiXiZ           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
В моем проекте источник данных один! Это важно. Возможно ли сделать несколько запросов на одном источнике? Высылаю пример. Там все время выполняется только первый запрос и не один раз.
Сообщения / Posts 70 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
В случае одного шаблона связи в СУБД во входное значение канала вызова шаблона нужно последовательно подавать число, соответствующее номеру SQL-запроса.
Реализовать программу можно аналогично примеру, приведенному выше для нескольких шаблонов.

В присланном Вами проекте в программе нет условия, обеспечивающего ожидания выполнения SQL-запроса по реальному значению канала вызова шаблона. Это и приводит к тому, что из трех запросов выполнятеся только первый.

Отправил Вам пример проекта.

Сообщения / Posts 17083 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Жигалов Денис Николаевич
Forum Haunter / Завсегдатай форума
Участник № / Member № 6035


Icon 1 отправлено / posted      Профиль для / Profile for Жигалов Денис Николаевич           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Вышлите пожалуйста пример проекта с программой, реализующей последовательное выполнение запросов.
Сообщения / Posts 112 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
К сожалению, за давностью времени пример проекта не сохранен.
Суть процедуры состоит в том, что в программе, последовательно реализующей несколько SQL-запросов одного шаблона, условием запуска следующего запроса является завершение предыдущего. Факт завершения запроса определяется по равенству нулю ВХОДНОГО_ЗНАЧЕНИЯ канала CALL.SQL.

Сообщения / Posts 17083 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Plumber
Forum Haunter / Завсегдатай форума
Участник № / Member № 7942


Icon 1 отправлено / posted      Профиль для / Profile for Plumber           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Доброго дня,уважаемая техподдержка.У меня к вам несколько вопросов.Вопрос первый-будет работать программа в таком виде и почему при компиляции выдает синтаксическую ошибку в первой строке?  -
 -
Пожалуйста помогите разобраться.

Сообщения / Posts 105 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Plumber
Forum Haunter / Завсегдатай форума
Участник № / Member № 7942


Icon 1 отправлено / posted      Профиль для / Profile for Plumber           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Да извините задача для начала: нужно отправить 3 запроса в разные строки таблицы автоматически.
Сообщения / Posts 105 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Щелкните два раза по ошибке в сообщениях, курсор переместится на саму ошибку. Из скрина видно, что комментарии неправильно объявлены. См. справку: Программирование алгоритмов - описание языка Техно ST - Лексическая структура языка Техно ST - Комментарии Техно ST. Необходимы символы "//", тогда как в программе "\\". После правильного объявления комментария, его текст изменит цвет на серый.
Сообщения / Posts 17083 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Plumber
Forum Haunter / Завсегдатай форума
Участник № / Member № 7942


Icon 1 отправлено / posted      Профиль для / Profile for Plumber           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
А работать программа будет? аргументы правильные? И второй вопрос: как вывести на ГЭ ЭТИ значения? Заранее благодарен.
Сообщения / Posts 105 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Почему необходимо использовать именно 3 запроса? В рамках одного запроса получить данные нет возможности?
Исправьте сначала очевидные ошибки. В отладчике будет результат компиляции.
Вывод уже полученных данных на графику описан почти в каждом учебном видео на нашем канале на YouTube: https://www.youtube.com/c/TRACEMODESCADAHMI
На сайте есть пример с ODBC с получением данных: http://www.adastra.ru/products/drivers/odbc/

Сообщения / Posts 17083 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
   

Quick Reply
Сообщение / Message:

HTML код не разрешен. / HTML is not enabled.
UBB код разрешен. / UBB Code is enabled.

Значки Graemlins / Instant Graemlins
   


Послать новую тему / Post New Topic  Послать ответ / Post A Reply Закрыть тему / Close Topic   Feature Topic   Переместить топик / Move Topic   Удалить топик / Delete Topic Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
 - Printer-friendly view of this topic
Перейти к / Hop To


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2