Пожалуйста, включите JavaScript для просмотра этого сайта.

Скрипты Simple-Scada

История: Примеры скриптов > Работа с БД

Получить значение из БД

Пред. Вверх След. Еще

Пусть имеется база данных с таблицей "table_1". Таблица имеет три колонки (или поля): "ID", "A", "B". Также она включает десять строк.

Задача: получить в скада-систему одно значение колонки "A" из строки номер шесть. Оно равно "32.4". Для этого сначала нужно составить SQL-запрос на выборку нужного значения. Он будет выглядеть так:

 SELECT `A` FROM `table_1` WHERE ID = 6;

 

Результатом выполнения этого запроса станет крошечная таблица, которая состоит из одной колонки "A" и одной строки:

 

Соответственно, она будет содержать всего одно нужное нам значение - "32.4". Итак, запрос у нас есть, теперь можно перейти к реализации в Simple-Scada. Добавим в проект новую кнопку "Button1" и создадим скрипт по событию "OnClick":

var
  aQuery: string;
begin
  // Формируем запрос к БД
  aQuery := 'SELECT `A` FROM `table_1` WHERE ID = 6;';
  // Отправляем запрос на выполнение c тегом = 1
  RunSQL(aQuery, nil1); 
end.

 

Теперь при нажатии на кнопку будет выполняться наш запрос. Осталось получить результат выполнения запроса и отобразить его в скада-системе. Для этого в редакторе скриптов необходимо создать новый скрипт, причем при создании нужно выбрать тип события "Выполнен SQL-запрос". Такой скрипт будет вызываться скада-системой каждый раз, когда выполнился пользовательский SQL-запрос. Также, этот скрипт будет содержать параметр "DataSet" - это таблица, которая была получена в результате выполнения запроса. Нам известно, что запрос вернет только одну колонку с одной строкой, поэтому можно брать значение напрямую, вот так:

begin
  if DataSet.Tag = 1 then
    Text1.Text := DataSet.Fields[0].AsStr;
end.

Сначала мы убедились что "DataSet" - это результат нашего запроса, так как мы помечали его тегом = 1. Затем, мы обращаемся к первой колонке (Fields[0] - в нашем случае это колонка `A`) и берем значение в виде строки в объект "Text1". Также, обращаться к колонкам можно используя более короткую запись:

begin
  if DataSet.Tag = 1 then
    Text1.Text := DataSet[0].AsStr;
end.

Проверить свои SQL-запросы и увидеть результат их выполнения, можно используя бесплатное приложение MySQL Workbench. Это поможет лучше понять SQL и БД.

 

Работа с выборкой из множества строк

Для перемещения курсора в наборе данных на следующую позицию используйте Next, а на предыдущую позицию - Prior. Если нужно перебрать весь набор данных, то цикл будет таким:

begin
  // выполнять цикл пока не достигнем конца набора данных
  while not DataSet.EOF do
  begin
    // здесь работаем с текущей строкой
    DataSet.Next;  // переходим на следующую строку
  end;
end.

 

А это тот же код, но добавлен проход по ячейкам строки:

var
  I: Integer;
  aStr: string;
begin
  // выполнять цикл пока не достигнем конца набора данных
  while not DataSet.EOF do
  begin
    // проходим по каждой ячейке текущей строки
    for I := 0 to DataSet.FieldCount - 1 do
      aStr := DataSet[I].AsStr;  // получаем значение текущей ячейки переведённое в строку и записываем его в переменную aStr.
 
    DataSet.Next;                // переходим на следующую строку
  end;
end.

 

Обратите внимание, если нужно вывести данные в компонент "Таблица", то можно использовать автоматическое заполнение таблицы при помощи метода RunSQL. Например, если в проекте есть таблица с именем Table1, то можно написать такой скрипт:

var
  aQuery: string;
begin
  aQuery := 'SELECT * FROM `my_table`';  // формируем запрос к БД на выборку всех данных из таблицы `my_table`
  Table1.RunSQL(aQuery, tsAll);          // выполнить запрос и заполнить таблицу результатом выполнения
end.