Форум 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 » Получение сигнала выполненного запроса от БД

   
Автор / Author Тема / Topic: Получение сигнала выполненного запроса от БД
Ave Oleg
Active Forum Member / Активный участник форума
Участник № / Member № 6246


Icon 7 отправлено / posted      Профиль для / Profile for Ave Oleg           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Здравстуйте.
Составлена программа ST на выполнение запроса INSERT. При нажатии на кнопку на экране, посылается сигнал через аргумент на выполнение запроса INSERT в БД. Однако при дальнейшей работе профайлера, данные продолжают независимо от кнопки записываться в БД, пополняя базу новыми дубликатами.
Вопрос:
Как можно получить сигнал от БД, что операция INSERT выполнилась? К какому атрибуту базы данных нужно привязать аргумент?

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


Icon 1 отправлено / posted      Профиль для / Profile for Ave Oleg           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Сделал еще одну кнопку "Stop", чтобы остановить запись в БД. И выяснилось, что дело тут еще в самой кнопке. После ее нажатия, сигнал теперь постоянно поступает в программу как будто кнопка нажата.
Вопрос:
1. Как сделать, чтобы сигнал от кнопки выполнялся один раз после ее нажатия?
2. И приходил сигнал от БД, что INSERT выполнен.

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


Icon 1 отправлено / posted      Профиль для / Profile for Ave Oleg           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Получилось, сделать вроде защелки на кнопку. В настройках кнопки (Передать значение -> Источник) сделал привязку к аргументу который обнуляет сигнал кнопки после нажатия. Но теперь приходиться немного держать кнопку, чтобы запрос INSERT успел выполниться хотя бы 1 раз.
Теперь нужно решить еще одну задачу.
Как "ловить" сигнал от БД, что INSERT выполнен?

Сообщения / Posts 87 | Из / 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 передать значение, равное номеру запроса в вызываемом шаблоне.
После реализации запроса ВХОДНОЕ значение канала CALL.SQL автоматически сбрасывается в 0.
Т.о., достаточно связать кнопку на экране с аргументом, который залинкован на ВХОДНОЕ значение канала CALL.SQL. Кнопку надо запрограммировать на "прямую передачу" номера запроса.
После реализации запроса аргумент экрана автоматически сбросится в 0.
От того же аргумента экрана можно сделать индикатор (цветом, контуром, текстом), который будет фиксировать состояние запроса.

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


Icon 1 отправлено / posted      Профиль для / Profile for Ave Oleg           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Да, но этот предложенный Вами способ скорее всего не может быть реализован. В будущем вместо кнопки сигнал на запрос в базу данных будет посылаться от внешнего устройства(оптический датчик).
По заданию требуется выполнять операции в следующем порядке. Получив данные в аргумент следует:
1. Выполнить поиск записи (дубликата) в БД через SELECT сравнив с данными в аргументе;
2. Если запись найдена, то Выдать сообщение "Найден дубликат";
2. Если записи нет, то в БД заносим эти данные аргумента через INSERT.
Что бы Вы могли посоветовать в этом случае?

Сообщения / Posts 87 | Из / 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-запрос, в атрибут 91, I1 записывается число строк в выборке, полученной из таблицы БД в результате этого запроса. "

Т.о., программа, анализирующая сигнал от оптического датчика, должна при регистрации "События" передать во ВХОД канала CALL_SQL_SELECT (аргумент IN/OUT) значение "1" (программно сбрасывать значение этого канала не следует!).
После этого программа должна контролировать значение канала CALL_SQL_SELECT и после его автоматического обнуления (запрос выполнен) проверить значение его атрибута 91 (I1). Если это значение отлично от 0, надо выдать сообщение "Найден дубликат".
Если значение атрибута 91 (I1) равно 0, запустить канал CALL_SQL_INSERT передачей в его ВХОД через аргумент IN/OUT номера запроса (программно сбрасывать значение этого канала не следует!).
Затем программа должна контролировать значение канала CALL_SQL_INSERT и после его автоматического обнуления (запрос выполнен) фиксировать и при необходимости индицировать завершение процедуры записи.

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


Icon 1 отправлено / posted      Профиль для / Profile for Ave Oleg           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Спасибо большое за помощь. Я так понимаю, нужно создать канал "Событие" и как-то используя ГЭ "События" все это совместить с ST - программой управляющей SQL запросами ?
Возник следующий вопрос:
Оптического датчика пока нет в наличии, возможно ли вместо него использовать кнопку?

Сообщения / Posts 87 | Из / 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 
1. Можно использовать кнопку, которая временно будет привязана к каналу, получающему сигналы от датчика.

2. В ГЭ "События" на вкладке "Привязки" правой клавишей мыши на свойстве "Привязки" вызвать и подтвердить ЛК предлагаемую команду "Привязка".
В открывшемся диалоге осуществить привязку к нужному аргументу.

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


Icon 1 отправлено / posted      Профиль для / Profile for Ave Oleg           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Скажите пожалуйста, есть ли какое-либо обучающее видео или пример с использованием канала "Событие" и ГЭ "События"?
Сообщения / Posts 87 | Из / 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
Ave Oleg
Active Forum Member / Активный участник форума
Участник № / Member № 6246


Icon 1 отправлено / posted      Профиль для / Profile for Ave Oleg           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Решил обойтись без канала "Событие", по причине массы вопросов.
После SELECT по атрибуту 91 (I1)удается зафиксировать дубликат в БД. Спасибо.
Вопрос: После нажатия кнопки со значением "1" сигнал в программном коде становиться постоянным "1" даже после завершения SELECT. Как можно обнулить сигнал от кнопки до следующего нажатия?
Если в свойствах кнопки установить "Восстанавливать значение" - TRUE, то приходиться ее держать вручную пока не выполниться запрос, что не есть хорошо. Или же как то можно привязать дополнительный аргумент к кнопке который будет считывать Входное значение на базу данных?

Сообщения / Posts 87 | Из / 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 
Если сигнал с кнопки передается непосредственно во ВХОД канала CALL.SELECT, то по завершении запроса значение соответствующего аргумента экрана сбросится в 0 автоматически.
Если кнопка передает сигнал в программу, надо предусмотреть сброс этого сигнала самой программой после передачи команды в канал CALL.SELECT.
При этом аргумент программы, принимающий сигнал от кнопки, должен быть типа IN/OUT.

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


Icon 1 отправлено / posted      Профиль для / Profile for Ave Oleg           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Спасибо большое, все работает [Улыбка / Smile]
Сообщения / Posts 87 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
DimaZh
Junior Member / Новичок
Участник № / Member № 1718


Icon 1 отправлено / posted      Профиль для / Profile for DimaZh           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Доброго времени суток. Объясните пожалуйста как без программы инициировать запись в БД по сигналу входа модуля ввода?
Сообщения / Posts 25 | Из / 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 
Для выполнения запроса в канал Call.SQLQuery в атрибут Входное Значение (2, In) нужно записать 1. После отработки значение канала автоматически сбрасывается в 0.

Программа необходима для создания однократной команды на запись. Команда должна подаваться и удерживаться до тех пор, пока не завершится процесс передачи команды в драйвер ODBC. Без программы эта задача крайне сложная.

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


Icon 1 отправлено / posted      Профиль для / Profile for DimaZh           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Раз в 5 минут на 10 секунд будет замыкаться вход на модуле ввода/вывода, по этому сигналу нужно записать в БД состояние других входов.
Сообщения / Posts 25 | Из / 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 
Можно реализовать необходимую логику с помощью программы. Например в FBD есть вкладка с FBD-блоками "триггеры и счетчики". Можно выбрать и настроить подходящие Вам по условиям счетчики и триггеры и с их помощью реализовать импульс по нужному событию и передать его на вход канала вызова шаблона СУБД, который осуществит запись в БД.
Сообщения / Posts 17083 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
DimaZh
Junior Member / Новичок
Участник № / Member № 1718


Icon 1 отправлено / posted      Профиль для / Profile for DimaZh           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Спасибо за идею! Вроде заработало. [Улыбка / Smile]
Сообщения / Posts 25 | Из / 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