Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Запись в БД текст по изменению 1 раз  (Прочитано 1077 раз)

ADilet

  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Здравствуйте, нужна помощь со скриптами
Надо сделать запись в БД текст
Когда условие срабатывает, скада записала дату и текст бд один раз.
У меня как условие срабатывает записывает каждую секунду.

Код: (delphi)
 procedure WriteValueToTable;
  var
 aQuery: string;
     begin
 aQuery := 'INSERT INTO `info_archive` (`Time`, `State`)' +
 'VALUES (' +
   MySQLDateTime(Now, dttFull) + ', ' +  // Конвертирует дату и время в строку в формате MySQL
       QuotedStr(StateDoor.AsStr) +
 ')';

RunSQL(aQuery, nil, 0);
end;

begin
  if tr.AsBool = true then
  begin
    WriteValueToTable;
  end;
end.
« Изменён: 04 Ноября 2021, 11:14:37 от Simple_Scada »

Simple Scada

  • Глобальный модератор
  • *****
  • Сообщений: 153
    • Просмотр профиля
    • Simple-Scada
Re: Запись в БД текст по изменению 1 раз0
« Ответ #1 : 04 Ноября 2021, 11:15:28 »
Здравствуйте.
В данном случае лучше использовать скрипт с типом события "Изменились переменные" , добавив переменную "tr"(и при необходимости другие переменные), изменение которой необходимо отслеживать в список скрипта, как это описано по ссылке. Тогда скрипт будет выполняться только при изменении переменной, а не каждую секунду.
Код: (delphi)
procedure WriteValueToTable;
var
  aQuery: string;
begin
  aQuery :=
    'INSERT INTO `info_archive` (`Time`, `State`) VALUES (' +
    MySQLDateTime(Now, dttFull) + ', ' +  // конвертирует дату и время в строку в формате MySQL
    QuotedStr(StateDoor.AsStr) +
    ')';

  RunSQL(aQuery, nil, 0);
end;

begin
  if tr.AsBool then
    WriteValueToTable;
end.

Если планируется использовать несколько таких "Boolean" переменных как "tr", то можно добавить их в список скрипта и чтобы скрипт был универсальным, код можно изменить следующим образом:
Код: (delphi)
begin
  if Variable.AsBool then
    WriteValueToTable;
end.
Тогда не нужно будет писать отдельный скрипт для каждой переменной.
« Изменён: 04 Ноября 2021, 12:14:52 от Simple-Scada »