arkos
Forum Haunter / Завсегдатай форума
Участник № / Member № 6144
отправлено / posted
Здравствуйте! В нашем проекте (МРВ+(32000 ch) TM 6.08 )данные для отображения поступают из БД (My SQL Workbench 5.2 CE), находящейся на удаленном сервере по локальной сети. При разрыве связи с сервером нужно выводить сообщение об этом оператору. Привязали данное сообщение к атрибуту Достоверность канала Сall, вызывающего шаблон БД. При выключении сервера атрибут Достоверность не изменяется (даже через 600 с) проект продолжает работать, т. е. оператор не знает о том, что связь прервана. Пробовали привязывать атрибуты 52, 91, 120. Отсутствие связи с сервером они не отражают. Отображать сообщение о том, что нет связи с сервером нужно не позднее 10 с.
отправлено / posted
МРВ может зафиксировать отсутствие связи с БД только по возвращаемому ODBC-драйвером сообщении об ошибке исполнения транзакции. Если признак недостоверности не выставляется, значит, ODBC-драйвер не возвращает соответствующий код ошибки.
Если не удастся настроить ODBC-драйвер соответствующим образом, можно попытаться периодически запрашивать у БД заведомо изменяющуюся переменную, по которой можно было бы судить о наличии связи.
Например, можно запросить у сервера текущее время. Для SQL-сервера, начиная с версии 2008 г., есть такой оператор GETDATE ( ).
arkos
Forum Haunter / Завсегдатай форума
Участник № / Member № 6144
отправлено / posted
Для отработки Баз данных мы используем канал CALL.Move. При обрыве связи с Сервером канал CALL.Move прожолжает работать. В канале в который принимается данные (дата) остается все время последнее значение.Но ведь из БД (сервера) уже ничего не поступает, а в канале висит значение. Почему значение не обнуляется? Как можно обнулить канал?
Сообщения / Posts 143 | Из / From: Украина
| IP / IP: IP адрес / IP address |
отправлено / posted
"Почему значение не обнуляется?" "Ноль" - это тоже вполне допустимое число. Обнуление аргументов канала не есть признак и необходимое следствие отсутствия связи с БД.
Признаком обнаружения отсутствия связи с БД является взведение атрибута ДОСТОВЕРНОСТЬ у канала вызова шаблона SQL-запроса или косвенный признак, как описано в предыдущем посте.
arkos
Forum Haunter / Завсегдатай форума
Участник № / Member № 6144
отправлено / posted
Данные в БД обновляются раз в 1с, соответственно мы должны читать их с той же частотой. С помощью канала MOVE посылается 1 на вход всех шаблонов БД (хотя из-за объема мы все равно не принимаем данные с частотой 1с мин. 4 с). Возможно вы предложите другой вариант постоянного опрашивания БД.
Сообщения / Posts 143 | Из / From: Украина
| IP / IP: IP адрес / IP address |
отправлено / posted
Мы не можем предложить более быстрый способ обмена с БД, поскольку динамика обмена определяется целиком возможностями ODBC-драйвера и СУБД. Если драйвер не справляется и выдает ошибку, соответствующему каналу SQL-запроса выставляется признак недостоверности, который использоваться как при обработке, так и при отображении полученных данных.
Если стоит задача обработки и/или отображения данных из БД "на лету", то торможение безусловно будет иметь место. Если Вас устроит считывание данных блоками, некими массивами последовательных записей, то, возможно, более редкое групповое считывание нескольких записей будет в конечном итоге более устойчивым. Об организации группового считывания столбцов и строк см. в Справочной системе.
Сообщения / Posts 17314 | Из / From: Россия
| IP / IP: IP адрес / IP address |
arkos
Forum Haunter / Завсегдатай форума
Участник № / Member № 6144
отправлено / posted
Извините еще раз переспрошу: то есть если канал (CALL) отключить от источника данных , то он не обнулится, а будет хранить последний результат.
Сообщения / Posts 143 | Из / From: Украина
| IP / IP: IP адрес / IP address |
arkos
Forum Haunter / Завсегдатай форума
Участник № / Member № 6144
отправлено / posted
Все данные из БД я получаю именно в CALL каналы (в том числе и дату). Как мне может пригодиться оператор GETDATE?
Сообщения / Posts 143 | Из / From: Украина
| IP / IP: IP адрес / IP address |
отправлено / posted
Оператор GETDATE (текущее время SQL-сервера) можно записать в какой-нибудь аргумент динамику. Если он меняется с ожидаемым периодом, значит связь с БД есть. Если "застыл" - связи нет.
Сообщения / Posts 17314 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Баранов Вячеслав
Junior Member / Новичок
Участник № / Member № 6904
отправлено / posted
Тоже встал вопрос о выводе сообщения в ОТ при потере связи с сервером. Как я понял, необходимо мониторить атрибут 4 канала, и привязать его к соответствующему атрибуту 10-25 (биты канала hex16), а там уже в словаре прописать нужное сообщение. Так вот вопрос - как привязать атрибут 4 к атрибуту (10-25), или нужно идти каким-то другим путем?
Сообщения / Posts 24 | Из / From: РФ
| IP / IP: IP адрес / IP address |
отправлено / posted
"Потеря связи с БД" скажется одновременно на всех SQL-запросах к этому серверу. Поэтому достаточно мониторить только один CALL.SQL, который обращается к БД чаще других. Если все-таки есть необходимость фиксировать устойчивость обмена по каждому SQL-запросу, надо "упаковывать" атрибуты 4 программно или использовать для пересылки канал CALL.MOVE.
Сообщения / Posts 17314 | Из / From: Россия
| IP / IP: IP адрес / IP address |