Допустим имеется переменная "MyVar", которая архивируется в базу данных, в таблицу с именем "trends":
Задача: по нажатию на кнопку "Button1" получить максимальное и минимальное значения переменной "MyVar" за последние 24 часа. Добавим в проект новую кнопку "Button1" и создадим скрипт по событию "OnClick":
var
aQuery: string; // сам запрос
aFrom, aTo: TDateTime; // интервал времени в формате TDateTime
aFromStr, aToStr: string; // интервал времени в виде строки
begin
{ сначала берём в интервал последние 24 часа }
aTo := Now; // текущее время помещаем в aTo
aFrom := IncHour(aTo, -24); // текущее время минус 24 часа помещаем в aFrom
{ теперь нужно перевести интервал в подходящую для SQL-строку,
которую будем использовать в SQL-запросе. Для этого используем функцию MySQLDateTime}
aFromStr := MySQLDateTime(aFrom, dttFull);
aToStr := MySQLDateTime(aTo, dttFull);
{ формируем SQL-запрос }
aQuery := 'SELECT TRUNCATE(MIN(Value), 2), TRUNCATE(MAX(Value), 2) ' +
'FROM `trends` ' +
'WHERE (`t` >= ' + aFromStr + ') AND (`t` <= ' + aToStr + ') AND ' +
'(`id` = ' + IntToStr(MyVar.ID) + ');';
{ отправляем запрос на выполнение c тегом = 1 }
RunSQL(aQuery, nil, 1);
end.
Рассмотрим подробнее SQL-запрос: TRUNCATE(MIN(Value), 2). Value - это имя колонки (в таблице "trends"), из которой нужно брать данные. Функция "TRUNCATE" берет вещественное число и усекает его до заданного количества десятичных знаков. В нашем примере берется минимальное значение за заданный интервал и усекается до двух знаков после десятичной запятой. Условия выборки задаются после оператора "WHERE". Мы выбираем все значения тренда переменной "MyVar", которые попали в интервал времени от "aFromStr" до "aToStr".
В итоге, при нажатии на кнопку "Button1" будет выполняться наш запрос. Остается получить результат выполнения запроса и отобразить его в скада-системе. Для этого в редакторе скриптов необходимо создать новый скрипт с типом события "Выполнен SQL-запрос". Такой скрипт будет вызываться скада-системой каждый раз, когда пользовательский SQL-запрос выполнился. Также, этот скрипт будет содержать параметр "DataSet" - это таблица, которая была получена в результате выполнения запроса. Нам известно, что запрос вернет только две колонки ("min" и "max") с одной строкой, поэтому можно брать эти значения напрямую, вот так:
begin
if DataSet.IsEmpty then Exit;
if DataSet.Tag = 1 then
begin
txtMin.Text := DataSet.Fields[0].AsStr;
txtMax.Text := DataSet.Fields[1].AsStr;
end;
end.
Пример работы с выборкой из множества строк можно найти по ссылке.
Сначала мы убедились, что "DataSet" это результат нашего запроса, так как мы помечали его тегом = 1. Затем, мы обращаемся к первой колонке (Fields[0]) и записываем ее содержимое в виде строки в объект "txtMin", обращаемся ко второй колонке (Fields[1]) и записываем ее содержимое в виде строки в объект "txtMax". В итоге, результат выполнения SQL-запроса помещён в объекты "txtMin" и "txtMax" и мы можем видеть минимальное и максимальное значения переменной "myVar" за последние 24 часа в скада-системе.