Работа с БД

> [HTML Version](workbd.html)

Скрипты Simple-Scada позволяют выполнять любые SQL-запросы с последующей обработкой результата. Выполнить SQL-запрос можно используя процедуру RunSQL, а обработать результат можно в любом скрипте с [типом события](event-types.md) "Выполнен SQL-запрос". Всю необходимую информацию по SQL-запросам можно найти в интернете, например: [неофициальное руководство по MySQL 4.0 на русском языке](http://www.mysql.ru/docs/man/Data_Manipulation.html), [официальное руководство по MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/). 

Важно\! Процедура RunSQL доступна только в версиях Standard, Professional и Demo-Time. Подробные примеры работы с БД можно найти в демо-проекте на странице "Скрипты" -> "Работа с БД", а также в разделе "[Примеры скриптов](dbscripts.md)". 

**Синтаксис**

````
procedure RunSQL(AQuery: string; const ASender: TObject = nil; const ATag: Integer = 0);

````
**Описание**

Выполняет запрос AQuery для базы данных проекта. В процедуру можно передать необязательные параметры: объект ASender и целое число ATag для собственных нужд. Обработать результаты запроса можно в скриптах с типом события "[Выполнен SQL-запрос](sql-query-completed.md)". Такие скрипты содержат параметр DataSet([TM\_DataSet](tmdataset.md)) - набор данных, полученный в результате выполнения запроса. DataSet имеет свойства Sender и Tag, которые были заданы во время вызова процедуры RunSQL. Также, набор данных DataSet включает в себя список столбцов Fields. Каждый столбец имеет тип [TM\_DBField](tmdbfield.md).

Важно\! Обработать ошибки в SQL-запросах можно в скрипе "[Ошибка SQL-запроса](sql-query-error.md)", например вывести ошибку в компонент "Текст". Также, для отладки скриптов работы с БД можно активировать опцию "[Лог пользовательских SQL-запросов](https://simple-scada.com/help/manual/settings-simple-scada-server.html?anchor=debug)", тогда все пользовательские SQL-запросы будут записываться в лог-файл сервера. **Данную опцию можно использовать только для отладки проекта, иначе она будет создавать лишнюю нагрузку на сервер скады**.

**Пример кода**

````
var  
  aQuery: string;  
begin  
  // Формируем запрос к БД  
  aQuery := 'SELECT \`A\` FROM \`table\_1\` WHERE ID = 6;';  
  // Отправляем запрос на выполнение c тегом = 1  
  RunSQL(aQuery, nil, 1);   
end.

````
