<< Click to Display Table of Contents >> Navigation: Проект в MasterSCADA 4D > Дерево системы > Получение и отправка данных > Дополнительные протоколы > Протоколы для работы с базами данных > Свойства Запроса к базе данных |
Данные настройки производятся при работе с произвольными базами данных.
Вид панели свойств элементов Запрос MSSQL, Запрос PostgreSQL:
Описание:
Название |
Рекомендации |
Категория Общие |
Как правило, для данного элемента не настраивается. Подробное описание данной категории приведено в соответствующем разделе. |
Категория Задача |
Задается способ опроса базы данных. Подробное описание категории приведено в разделе, описывающем настройку категории Задачи. |
Категория Настройки |
|
Команда |
Вводится SQL-запрос. Для чтения значений из канала в тексте запроса вводится имя выходного канала в фигурных скобках. На приведенном рисунке L01_IN_Q_IN, L01_IZNOS_IN - каналы протокола, аналогичные переменные присутствуют в базе данных, к которой идет обращение, а "sPDK"."V_PLC_Message" - название таблицы в указанной базе данных. Параметр канала в режиме исполнения принимает значение, записанное в базе данных. Для записи в базу данных используется команда INSERT. Например, INSERT INTO table (column1, column2) VALUES ({output_channel1}, {output_channel2}) или INSERT INTO "TABLENAME"(DATA) VALUES({@Channelname}). Важно! Необходимо ставить пробел после @Channelname, иначе запись не сработает. Channelname - имя выходного канала в дереве протокола. |
В режиме исполнения, в случае невозможности выполнения запроса, параметр Ошибка принимает текстовое значение. Например, "Bad channel name: '@CHANNEL_NAME' in command: SQL_COMMAND" - канал не найден.
Есть два способа вставки данных в запрос:
•текст запроса {ИмяКанала} текст запроса..
•текст запроса {$ИмяКанала} текст запроса..
Плюсы:
•Защита от SQL-"инъекций"
•Выполнение запроса происходит немного быстрее
Минусы:
•Не во все части sql запроса можно вставить. Например, сервер БД не позволит выполнить такой запрос: select {CH1} from {CH2}
Плюсы:
•Можно динамизировать запросы, т.е. писать запросы вида: select {$CH1} from {$CH2} where {$CH3} = {CH4}
Минусы:
•Подстановка происходит как есть, без экранирования спецсиволов. Если в CH1 будет текст вида 1; DROP TABLE test; select 1он отправится на сервер и успешно там выполнится