Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: tech26 от 14 Октября 2022, 10:58:27

Название: Как получить SQL error code?
Отправлено: tech26 от 14 Октября 2022, 10:58:27
В таблице рецептов БД предусмотрена уникальность по имени (строковое наименование рецепта). При попытке добавить рецепт с уже существующим именем БД выдаёт ошибку Error Code: 1062. Duplicate entry '...
Как поймать эту ошибку в simple scada и выдать соответствующее сообщение пользователю?
Скрипт на событие "Ошибка SQL запроса" не срабатывает.
Название: Re: Как получить SQL error code?
Отправлено: Simple_Scada от 15 Октября 2022, 13:53:22
Здравствуйте.

Если в запросе используется ключевое слово "IGNORE", то ошибки возникающие во время вставки будут игнорироваться (подробнее см. по ссылке (https://www.geeksforgeeks.org/sql-insert-ignore-statement/)). В этом случае, вместо ошибки MySQL сервер будет генерировать предупреждение. Поэтому в скаду ошибка не приходит.

Если использовать инструкцию "INSERT" без "IGNORE", то MySQL сервер вернёт ошибку и ее можно будет обработать в скрипте по событию "Ошибка SQL запроса (https://simple-scada.com/help/script/sql-query-error.html)". Например, если колонка имени уникальна, то при попытке вставки строки с существующим именем MySQL сервер вернёт ошибку, в которой будет одержаться слово "UNIQUE". Можно выполнить поиск по тексту ошибки и выдать предупреждение:
Код: (delphi)
begin
  if Pos('UNIQUE', Msg) <> 0 then // если ошибка содержит слово "UNIQUE", то выдать предупреждение
    ShowMessageAll('Ошибка!', 'Введенное имя уже существует.' );
end.