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

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

Автор Тема: Проблема с SQL при обновлении версии  (Прочитано 3180 раз)

виктор

  • Новичок
  • *
  • Сообщений: 7
    • Просмотр профиля
добрый вечер. столкнулся с проблемой при обновлении до версии 2.2.6.1 компилятор ругается на скрипты с SQL insert запросом на сервере 2.2.1.1 все работает. вопрос были ли изменения в составление запроса, а то туплю уже пол дня не могу найти косяк :)
« Изменён: 20 Ноября 2017, 17:59:58 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: проблема с SQL при обновлении версии
« Ответ #1 : 20 Ноября 2017, 17:59:21 »
Здравствуйте.
Если Вы говорите про процедуру RunSQL, то она должна вызываться например так:

Код
var
  aQuery: string;
begin
  { формируем SQL-запрос }
  aQuery := 'INSERT INTO `my_db`.`my_table` (`ID`, `Value`) VALUES (1, 10);';
  { отправляем запрос на выполнение }
  RunSQL(aQuery, nil, 0);
end.

Опубликуйте код скрипта. Мы укажем на ошибки.

виктор

  • Новичок
  • *
  • Сообщений: 7
    • Просмотр профиля
Re: Проблема с SQL при обновлении версии
« Ответ #2 : 20 Ноября 2017, 18:09:53 »
так вопрос от нуба, а как код вставить, во вложении? или просто скопировать

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: Проблема с SQL при обновлении версии
« Ответ #3 : 20 Ноября 2017, 18:10:39 »
Просто скопируйте его в текст сообщения.

виктор

  • Новичок
  • *
  • Сообщений: 7
    • Просмотр профиля
Re: Проблема с SQL при обновлении версии
« Ответ #4 : 20 Ноября 2017, 18:11:28 »
Код
const
  INTERVAL_sql_mh = 7200;   // Интервал таймера запись моточасов в секундах


var
  aSeconds_sql_mh: Int64;
 
  { эта подпроцедура выполняет запрос на вставку в БД значения переменной vrTemperature }
  procedure Writesqlmh;
    var
SQLinsert_pt3_mh,
a_pt3_kr11mh, a_pt3_kr12mh, a_pt3_kr13mh, a_pt3_kr14mh,
a_pt3_kr21mh, a_pt3_kr22mh, a_pt3_kr23mh, a_pt3_kr24mh,
a_pt3_kr31mh, a_pt3_kr32mh, a_pt3_kr33mh, a_pt3_kr34mh,
a_pt3_kr41mh, a_pt3_kr42mh, a_pt3_kr43mh, a_pt3_kr44mh,
a_pt3_kr51mh, a_pt3_kr52mh, a_pt3_kr53mh, a_pt3_kr54mh,
a_pt3_kr61mh, a_pt3_kr62mh, a_pt3_kr63mh, a_pt3_kr64mh,

a_pt3_pr1_12mh, a_pt3_pr1_34mh,
a_pt3_pr2_12mh, a_pt3_pr2_34mh,
a_pt3_pr3_12mh, a_pt3_pr3_34mh,
a_pt3_pr4_12mh, a_pt3_pr4_34mh,
a_pt3_pr5_12mh, a_pt3_pr5_34mh,
a_pt3_pr6_12mh, a_pt3_pr6_34mh

  : string;
begin
  //{ Переводим в строку каждую переменную}
  a_pt3_kr11mh := QuotedStr(pt3_kr_1_1_mh.AsStr);
  a_pt3_kr12mh := QuotedStr(pt3_kr_1_2_mh.AsStr);
  a_pt3_kr13mh := QuotedStr(pt3_kr_1_3_mh.AsStr);
  a_pt3_kr14mh := QuotedStr(pt3_kr_1_4_mh.AsStr);
  a_pt3_kr21mh := QuotedStr(pt3_kr_2_1_mh.AsStr);
  a_pt3_kr22mh := QuotedStr(pt3_kr_2_2_mh.AsStr);
  a_pt3_kr23mh := QuotedStr(pt3_kr_2_3_mh.AsStr);
  a_pt3_kr24mh := QuotedStr(pt3_kr_2_4_mh.AsStr);
  a_pt3_kr31mh := QuotedStr(pt3_kr_3_1_mh.AsStr);
  a_pt3_kr32mh := QuotedStr(pt3_kr_3_2_mh.AsStr);
  a_pt3_kr33mh := QuotedStr(pt3_kr_3_3_mh.AsStr);
  a_pt3_kr34mh := QuotedStr(pt3_kr_3_4_mh.AsStr);
  a_pt3_kr41mh := QuotedStr(pt3_kr_4_1_mh.AsStr);
  a_pt3_kr42mh := QuotedStr(pt3_kr_4_2_mh.AsStr);
  a_pt3_kr43mh := QuotedStr(pt3_kr_4_3_mh.AsStr);
  a_pt3_kr44mh := QuotedStr(pt3_kr_4_4_mh.AsStr);
  a_pt3_kr51mh := QuotedStr(pt3_kr_5_1_mh.AsStr);
  a_pt3_kr52mh := QuotedStr(pt3_kr_5_2_mh.AsStr);
  a_pt3_kr53mh := QuotedStr(pt3_kr_5_3_mh.AsStr);
  a_pt3_kr54mh := QuotedStr(pt3_kr_5_4_mh.AsStr);
  a_pt3_kr61mh := QuotedStr(pt3_kr_6_1_mh.AsStr);
  a_pt3_kr62mh := QuotedStr(pt3_kr_6_2_mh.AsStr);
  a_pt3_kr63mh := QuotedStr(pt3_kr_6_3_mh.AsStr);
  a_pt3_kr64mh := QuotedStr(pt3_kr_6_4_mh.AsStr);

  a_pt3_pr1_12mh := QuotedStr(pt3_pr_1_12_mh.AsStr);
  a_pt3_pr1_34mh := QuotedStr(pt3_pr_1_34_mh.AsStr);
  a_pt3_pr2_12mh := QuotedStr(pt3_pr_2_12_mh.AsStr);
  a_pt3_pr2_34mh := QuotedStr(pt3_pr_2_34_mh.AsStr);
  a_pt3_pr3_12mh := QuotedStr(pt3_pr_3_12_mh.AsStr);
  a_pt3_pr3_34mh := QuotedStr(pt3_pr_3_34_mh.AsStr);
  a_pt3_pr4_12mh := QuotedStr(pt3_pr_4_12_mh.AsStr);
  a_pt3_pr4_34mh := QuotedStr(pt3_pr_4_34_mh.AsStr);
  a_pt3_pr5_12mh := QuotedStr(pt3_pr_5_12_mh.AsStr);
  a_pt3_pr5_34mh := QuotedStr(pt3_pr_5_34_mh.AsStr);
  a_pt3_pr6_12mh := QuotedStr(pt3_pr_6_12_mh.AsStr);
  a_pt3_pr6_34mh := QuotedStr(pt3_pr_6_34_mh.AsStr);


  //{ Формируем запрос к БД }
  SQLinsert_pt3_mh := 'INSERT INTO `server_otkorm`.`pt3_motorhours`
(`kr_1_1mh`,`kr_1_2mh`,`kr_1_3mh`,`kr_1_4mh`,
  `kr_2_1mh`,`kr_2_2mh`,`kr_2_3mh`,`kr_2_4mh`,
  `kr_3_1mh`,`kr_3_2mh`,`kr_3_3mh`,`kr_3_4mh`,
  `kr_4_1mh`,`kr_4_2mh`,`kr_4_3mh`,`kr_4_4mh`,
  `kr_5_1mh`,`kr_5_2mh`,`kr_5_3mh`,`kr_5_4mh`,
  `kr_6_1mh`,`kr_6_2mh`,`kr_6_3mh`,`kr_6_4mh`,
  `pr_1_1-2mh`,`pr_1_3-4mh`,
  `pr_2_1-2mh`,`pr_2_3-4mh`,
  `pr_3_1-2mh`,`pr_3_3-4mh`,
  `pr_4_1-2mh`,`pr_4_3-4mh`,
  `pr_5_1-2mh`,`pr_5_3-4mh`,
  `pr_6_1-2mh`,`pr_6_3-4mh`)
VALUES (' + a_pt3_kr11mh + ', ' + a_pt3_kr12mh + ', ' + a_pt3_kr13mh + ', ' + a_pt3_kr14mh + ',
 ' + a_pt3_kr21mh + ', ' + a_pt3_kr22mh + ', ' + a_pt3_kr23mh + ', ' + a_pt3_kr24mh + ',
 ' + a_pt3_kr31mh + ', ' + a_pt3_kr32mh + ', ' + a_pt3_kr33mh + ', ' + a_pt3_kr34mh + ',
 ' + a_pt3_kr41mh + ', ' + a_pt3_kr42mh + ', ' + a_pt3_kr43mh + ', ' + a_pt3_kr44mh + ',
 ' + a_pt3_kr51mh + ', ' + a_pt3_kr52mh + ', ' + a_pt3_kr53mh + ', ' + a_pt3_kr54mh + ',
 ' + a_pt3_kr61mh + ', ' + a_pt3_kr62mh + ', ' + a_pt3_kr63mh + ', ' + a_pt3_kr64mh + ',
 
 ' + a_pt3_pr1_12mh + ', ' + a_pt3_pr1_34mh + ',
 ' + a_pt3_pr2_12mh + ', ' + a_pt3_pr2_34mh + ',
 ' + a_pt3_pr3_12mh + ', ' + a_pt3_pr3_34mh + ',
 ' + a_pt3_pr4_12mh + ', ' + a_pt3_pr4_34mh + ',
 ' + a_pt3_pr5_12mh + ', ' + a_pt3_pr5_34mh + ',
 ' + a_pt3_pr6_12mh + ', ' + a_pt3_pr6_34mh + ')';
  //{ Отправляем запрос на выполнение }
  RunSQL(SQLinsert_pt3_mh, nil, 1);
end;


begin           
  //{ если vrTimer ещё не инициализирована, то инициализируем её и прерываем скрипт }
  if pt3_timer_sql_mh.Value < 1 then
    pt3_timer_sql_mh.Value := Now;
 
  //{ получаем кол-во секунд с последнего срабатывания таймера }
  aSeconds_sql_mh := SecondsBetween(Now, pt3_timer_sql_mh.AsDateTime);
 
  //{ если прошло больше, чем INTERVAL секунд с последнего срабатывания таймера }
  if aSeconds_sql_mh >= INTERVAL_sql_mh then
  begin
    Writesqlmh;    // вызываем подпроцедуру вставки в БД
    pt3_timer_sql_mh.Value := Now;
  end;
end.
« Изменён: 20 Ноября 2017, 18:11:53 от Simple-Scada »

виктор

  • Новичок
  • *
  • Сообщений: 7
    • Просмотр профиля
Re: Проблема с SQL при обновлении версии
« Ответ #5 : 20 Ноября 2017, 18:12:19 »
в 2.2.1.1 все работает я их вообще не касался

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: Проблема с SQL при обновлении версии
« Ответ #6 : 20 Ноября 2017, 18:20:20 »
Цитировать
в 2.2.1.1 все работает я их вообще не касался
Если Вы скопируете этот код в версию 2.2.1.1 и в любую другую, то он не скомпилируется. Скомпилироваться он может только если записать код запроса в одну длинную строку. В приведённом Вами коде запрос неправильно разбит на строки.

Допустим есть код:
Код
var
  aStr: string;
begin
  aStr := 'просто длинная строка';
end;

Чтобы записать присвоение в несколько строк нужно писать так:
Код
var
  aStr: string;
begin
  aStr := 'просто ' +
    'длинная ' +
    'строка';
end;

Т.е. каждая новая строка должна быть заключена в одинарные кавычки и строки должны складываться знаком "+". Исправленный пример для Вашего кода:
Код
  { Формируем запрос к БД }
  SQLinsert_pt3_mh := 'INSERT INTO `server_otkorm`.`pt3_motorhours`' +
'(`kr_1_1mh`,`kr_1_2mh`,`kr_1_3mh`,`kr_1_4mh`,' +
  '`kr_2_1mh`,`kr_2_2mh`,`kr_2_3mh`,`kr_2_4mh`,' +
  '`kr_3_1mh`,`kr_3_2mh`,`kr_3_3mh`,`kr_3_4mh`,' +
  '`kr_4_1mh`,`kr_4_2mh`,`kr_4_3mh`,`kr_4_4mh`,' +
  '`kr_5_1mh`,`kr_5_2mh`,`kr_5_3mh`,`kr_5_4mh`,' +
  '`kr_6_1mh`,`kr_6_2mh`,`kr_6_3mh`,`kr_6_4mh`,' +
  '`pr_1_1-2mh`,`pr_1_3-4mh`,' +
... и так далее

« Изменён: 20 Ноября 2017, 18:21:15 от Simple-Scada »

виктор

  • Новичок
  • *
  • Сообщений: 7
    • Просмотр профиля
Re: Проблема с SQL при обновлении версии
« Ответ #7 : 20 Ноября 2017, 18:24:24 »
спасибо завтра проверим, вопрос тогда почему он работал?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: Проблема с SQL при обновлении версии
« Ответ #8 : 20 Ноября 2017, 18:38:22 »
Цитировать
вопрос тогда почему он работал?
Может быть у Вас запрос просто был записан одной длинной строкой, а в новой версии Вы его разбили на строки?
update: все же есть причина по которой код мог работать. В версии 2.2.1.1 компилятор работал с символами переноса строки по-другому и код мог скомпилироваться как одна цельная строка автоматически.   

Вот Ваш код SQL-запроса с полностью правильным форматированием:
Код
  { Формируем запрос к БД }
  SQLinsert_pt3_mh := 'INSERT INTO `server_otkorm`.`pt3_motorhours`' +
'(`kr_1_1mh`,`kr_1_2mh`,`kr_1_3mh`,`kr_1_4mh`,' +
  '`kr_2_1mh`,`kr_2_2mh`,`kr_2_3mh`,`kr_2_4mh`,' +
  '`kr_3_1mh`,`kr_3_2mh`,`kr_3_3mh`,`kr_3_4mh`,' +
  '`kr_4_1mh`,`kr_4_2mh`,`kr_4_3mh`,`kr_4_4mh`,' +
  '`kr_5_1mh`,`kr_5_2mh`,`kr_5_3mh`,`kr_5_4mh`,' +
  '`kr_6_1mh`,`kr_6_2mh`,`kr_6_3mh`,`kr_6_4mh`,' +
  '`pr_1_1-2mh`,`pr_1_3-4mh`,' +
  '`pr_2_1-2mh`,`pr_2_3-4mh`,' +
  '`pr_3_1-2mh`,`pr_3_3-4mh`,' +
  '`pr_4_1-2mh`,`pr_4_3-4mh`,' +
  '`pr_5_1-2mh`,`pr_5_3-4mh`,' +
  '`pr_6_1-2mh`,`pr_6_3-4mh`)' +
'VALUES (' + a_pt3_kr11mh + ', ' + a_pt3_kr12mh + ', ' + a_pt3_kr13mh + ', ' + a_pt3_kr14mh + ',' +
  a_pt3_kr21mh + ', ' + a_pt3_kr22mh + ', ' + a_pt3_kr23mh + ', ' + a_pt3_kr24mh + ',' +
  a_pt3_kr31mh + ', ' + a_pt3_kr32mh + ', ' + a_pt3_kr33mh + ', ' + a_pt3_kr34mh + ',' +
  a_pt3_kr41mh + ', ' + a_pt3_kr42mh + ', ' + a_pt3_kr43mh + ', ' + a_pt3_kr44mh + ',' +
  a_pt3_kr51mh + ', ' + a_pt3_kr52mh + ', ' + a_pt3_kr53mh + ', ' + a_pt3_kr54mh + ',' +
  a_pt3_kr61mh + ', ' + a_pt3_kr62mh + ', ' + a_pt3_kr63mh + ', ' + a_pt3_kr64mh + ',' +

  a_pt3_pr1_12mh + ', ' + a_pt3_pr1_34mh + ',' +
  a_pt3_pr2_12mh + ', ' + a_pt3_pr2_34mh + ',' +
  a_pt3_pr3_12mh + ', ' + a_pt3_pr3_34mh + ',' +
  a_pt3_pr4_12mh + ', ' + a_pt3_pr4_34mh + ',' +
  a_pt3_pr5_12mh + ', ' + a_pt3_pr5_34mh + ',' +
  a_pt3_pr6_12mh + ', ' + a_pt3_pr6_34mh + ')';

виктор

  • Новичок
  • *
  • Сообщений: 7
    • Просмотр профиля
Re: Проблема с SQL при обновлении версии
« Ответ #9 : 20 Ноября 2017, 18:45:15 »
спасибо за оперативную помощь. все заработало
 тех поддержка на высоте !