Тема / Topic: Получение сигнала выполненного запроса от БД
Ave Oleg
Active Forum Member / Активный участник форума
Участник № / Member № 6246
отправлено / posted
Здравстуйте. Составлена программа ST на выполнение запроса INSERT. При нажатии на кнопку на экране, посылается сигнал через аргумент на выполнение запроса INSERT в БД. Однако при дальнейшей работе профайлера, данные продолжают независимо от кнопки записываться в БД, пополняя базу новыми дубликатами. Вопрос: Как можно получить сигнал от БД, что операция INSERT выполнилась? К какому атрибуту базы данных нужно привязать аргумент?
Сообщения / Posts 87 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Ave Oleg
Active Forum Member / Активный участник форума
Участник № / Member № 6246
отправлено / posted
Сделал еще одну кнопку "Stop", чтобы остановить запись в БД. И выяснилось, что дело тут еще в самой кнопке. После ее нажатия, сигнал теперь постоянно поступает в программу как будто кнопка нажата. Вопрос: 1. Как сделать, чтобы сигнал от кнопки выполнялся один раз после ее нажатия? 2. И приходил сигнал от БД, что INSERT выполнен.
Сообщения / Posts 87 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Ave Oleg
Active Forum Member / Активный участник форума
Участник № / Member № 6246
отправлено / posted
Получилось, сделать вроде защелки на кнопку. В настройках кнопки (Передать значение -> Источник) сделал привязку к аргументу который обнуляет сигнал кнопки после нажатия. Но теперь приходиться немного держать кнопку, чтобы запрос INSERT успел выполниться хотя бы 1 раз. Теперь нужно решить еще одну задачу. Как "ловить" сигнал от БД, что INSERT выполнен?
Сообщения / Posts 87 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Согласно документации для генерации SQL-запроса необходимо в атрибут ВХОДНОЕ значение канала CALL.SQL передать значение, равное номеру запроса в вызываемом шаблоне. После реализации запроса ВХОДНОЕ значение канала CALL.SQL автоматически сбрасывается в 0. Т.о., достаточно связать кнопку на экране с аргументом, который залинкован на ВХОДНОЕ значение канала CALL.SQL. Кнопку надо запрограммировать на "прямую передачу" номера запроса. После реализации запроса аргумент экрана автоматически сбросится в 0. От того же аргумента экрана можно сделать индикатор (цветом, контуром, текстом), который будет фиксировать состояние запроса.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Ave Oleg
Active Forum Member / Активный участник форума
Участник № / Member № 6246
отправлено / posted
Да, но этот предложенный Вами способ скорее всего не может быть реализован. В будущем вместо кнопки сигнал на запрос в базу данных будет посылаться от внешнего устройства(оптический датчик). По заданию требуется выполнять операции в следующем порядке. Получив данные в аргумент следует: 1. Выполнить поиск записи (дубликата) в БД через SELECT сравнив с данными в аргументе; 2. Если запись найдена, то Выдать сообщение "Найден дубликат"; 2. Если записи нет, то в БД заносим эти данные аргумента через INSERT. Что бы Вы могли посоветовать в этом случае?
Сообщения / Posts 87 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Из документации: "Если в шаблоне связи с БД содержится только один 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 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Ave Oleg
Active Forum Member / Активный участник форума
Участник № / Member № 6246
отправлено / posted
Спасибо большое за помощь. Я так понимаю, нужно создать канал "Событие" и как-то используя ГЭ "События" все это совместить с ST - программой управляющей SQL запросами ? Возник следующий вопрос: Оптического датчика пока нет в наличии, возможно ли вместо него использовать кнопку?
Сообщения / Posts 87 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
1. Можно использовать кнопку, которая временно будет привязана к каналу, получающему сигналы от датчика.
2. В ГЭ "События" на вкладке "Привязки" правой клавишей мыши на свойстве "Привязки" вызвать и подтвердить ЛК предлагаемую команду "Привязка". В открывшемся диалоге осуществить привязку к нужному аргументу.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Ave Oleg
Active Forum Member / Активный участник форума
Участник № / Member № 6246
отправлено / posted
Скажите пожалуйста, есть ли какое-либо обучающее видео или пример с использованием канала "Событие" и ГЭ "События"?
Сообщения / Posts 87 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Материалов по использованию канала СОБЫТИЕ, дополняющих его описание в документации, нет.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Ave Oleg
Active Forum Member / Активный участник форума
Участник № / Member № 6246
отправлено / posted
Решил обойтись без канала "Событие", по причине массы вопросов. После SELECT по атрибуту 91 (I1)удается зафиксировать дубликат в БД. Спасибо. Вопрос: После нажатия кнопки со значением "1" сигнал в программном коде становиться постоянным "1" даже после завершения SELECT. Как можно обнулить сигнал от кнопки до следующего нажатия? Если в свойствах кнопки установить "Восстанавливать значение" - TRUE, то приходиться ее держать вручную пока не выполниться запрос, что не есть хорошо. Или же как то можно привязать дополнительный аргумент к кнопке который будет считывать Входное значение на базу данных?
Сообщения / Posts 87 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Если сигнал с кнопки передается непосредственно во ВХОД канала CALL.SELECT, то по завершении запроса значение соответствующего аргумента экрана сбросится в 0 автоматически. Если кнопка передает сигнал в программу, надо предусмотреть сброс этого сигнала самой программой после передачи команды в канал CALL.SELECT. При этом аргумент программы, принимающий сигнал от кнопки, должен быть типа IN/OUT.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Ave Oleg
Active Forum Member / Активный участник форума
Участник № / Member № 6246
DimaZh
Junior Member / Новичок
Участник № / Member № 1718
отправлено / posted
Доброго времени суток. Объясните пожалуйста как без программы инициировать запись в БД по сигналу входа модуля ввода?
Сообщения / Posts 25 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Для выполнения запроса в канал Call.SQLQuery в атрибут Входное Значение (2, In) нужно записать 1. После отработки значение канала автоматически сбрасывается в 0.
Программа необходима для создания однократной команды на запись. Команда должна подаваться и удерживаться до тех пор, пока не завершится процесс передачи команды в драйвер ODBC. Без программы эта задача крайне сложная.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
DimaZh
Junior Member / Новичок
Участник № / Member № 1718
отправлено / posted
Раз в 5 минут на 10 секунд будет замыкаться вход на модуле ввода/вывода, по этому сигналу нужно записать в БД состояние других входов.
Сообщения / Posts 25 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Можно реализовать необходимую логику с помощью программы. Например в FBD есть вкладка с FBD-блоками "триггеры и счетчики". Можно выбрать и настроить подходящие Вам по условиям счетчики и триггеры и с их помощью реализовать импульс по нужному событию и передать его на вход канала вызова шаблона СУБД, который осуществит запись в БД.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
DimaZh
Junior Member / Новичок
Участник № / Member № 1718