Добрый день!
Согласно руководству у нас есть скрипт типа "Ошибка SQL запроса". Логика создания понятна. Есть ошибка есть сообщение в Msg.
Но так же у нас есть (можно сказать ID запроса, DataSet) в RunSQL свой ATag. И в скрипте типа "Выполнен SQL запрос" все замечательно работает.
Теперь к ситуации.
В универсальном скрипте, привязанном к кнопке по нажатию, формируем RunSQL(aQuery, nil, 100), где
aQuery := 'CREATE TABLE ' + NameNewTable.AsStr + ' LIKE TemplateTable'.
Далее в скрипте типа "Ошибка SQL запроса" добавляем
TextSQLError.Value := Msg;
if TextSQLError.Value <> '' then
AddMessage(Now, mkWarning, 'Таблица не добавлена', True, True);
и все прекрасно работает если мы пытаемся имитировать именно ошибку добавления таблицы с таким же именем.
Но вот вопрос, не будет ли путать оператора сообщение о создании таблицы при других ошибках SQL запросов. По логике событие будет формироваться при любых ошибках SQL запросов. Честно пока не подтвердилось опасение. Возможно ошибки Таблица. RunSQL к типу "Ошибка SQL запроса" не относятся.
Можете у себя это проверить или опровергнуть опасения.
И теперь маленькое предложение-вопрос.
Если в скрипте типа "Ошибка SQL запроса" использовать следующую конструкцию:
begin
case DataSet.Tag of
100 :begin
TextSQLError.Value := Msg;
if TextSQLError.Value <> '' then
AddMessage(Now, mkWarning, 'Таблица не добавлена', True, True);
end;
end;
end.
У меня не заработала. Всего скорее, потому что номер 100 относиться к DataSet, а не к ошибке. И обработка идет в типе скрипта "Ошибка SQL запроса".
Или все таки он может заработать? Потому что я делаю не правильно? или потому что это скоро "... появиться в ближайших обновлениях ..." :D
Жду вопросов и предожений
Здравствуйте.
Для информирования оператора о существовании таблицы можно предварительно проверить ее наличие.
Универсальный скрипт:
. . .
aQuery := 'SHOW TABLES LIKE ' + QuotedStr(NameNewTable.AsStr) + ';';
RunSQL(aQuery, nil, 100);
. . .
Скрипт "Выполнен SQL-запрос"
case DataSet.Tag of
. . .
100: if DataSet.IsEmpty then RunSQL('CREATE TABLE `' + NameNewTable.AsStr + '` LIKE `TemplateTable`;', nil, 101)
else AddMessage(Now, mkWarning, 'Таблица не добавлена', True, True);
. . .
end;
Получить тэг запроса для события "Ошибка SQL-запроса" (пока это не реализовано средствами Simple-Scada).
В предположении, что порядок вызовов процедуры RunSQL соответствует порядку событий завершения, можно организовать очередь тэгов, добавляя новый тэг при вызове и извлекая тэг по событию SQL-запроса или ошибки SQL-запроса.
Проект узкоспецифичный, смысла в приведении программного кода нет. См. вложение.