Последняя версия DataExpress 3 beta от 9 декабря 2018 года. Скачать. Энциклопедия DX. Форум на Develop-Soft

Обработка ошибок через вызов RaiseException

Вопросы о применении того или иного класса или функции.
drts
Опытный
Сообщения: 279
Зарегистрирован: Сб окт 29, 2016 11:35 pm
Откуда: Новороссийск

Обработка ошибок через вызов RaiseException

Сообщение drts » Ср май 03, 2017 11:45 pm

После срабатывания RaiseException в скрипте

Код: Выделить всё

if result = '' then
    RaiseException(erCustomError, 'Объект ' + GridName + ' не найден!');

В форме пропадают все компоненты( если представление только таблица- то тоже пропадает):
scr.png
scr.png (28.52 КБ) 1126 просмотров

после закрытия окна ошибки компоненты не возвращаются. Лечится переходом в дизайнер и обратно.
Функцию с обработчиком ошибки вызываю из form_create.

И еще. В новой версии:Если после вывода в окне сообщений сразу перейти в дизайнер- редактор скриптов, то окно сообщений закрыть нельзя. Кнопка закрытия неактивна. При переходе в дизайнер кнопка активируется, окно закрывается.

Аватара пользователя
admin
Разработчик
Сообщения: 3956
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская

Re: Баг после срабатывания RaiseException

Сообщение admin » Чт май 04, 2017 7:26 am

В последней сборки я изменил поведение программы при исключительной ситуации. Раньше сообщение об ошибке появлялось в окне вывода. Но окно вывода появлялось всегда, даже если ошибка обрабатывалась в скрипте в блоке try..except. А это не желательно, когда нужно обработать ошибку без вывода каких-либо сообщений. Если ошибка возникла вне блока try, то вызывается обработчик программы и вы видите окно "Опа!". Естественно, что в этом случае все текущие действия программы прерываются и случается подобное как на скриншоте. Вы можете вместо RaiseException вызывать функцию debug.

neitri
Мастер скриптов
Сообщения: 541
Зарегистрирован: Пн фев 13, 2017 5:42 pm

Re: Баг после срабатывания RaiseException

Сообщение neitri » Чт май 04, 2017 12:38 pm

По моему здесь не правильное использование RaiseException.
Его требуется использовать совместно с блоком try except. По другому намеренно перейти в except возможности ведь нет. Или я другой возможности не знаю. Делить на 0 не предлагать.
Помогли Тебе. Помоги проекту.
Реквизиты помощи Вы можете найти в окне "О программе"

Аватара пользователя
admin
Разработчик
Сообщения: 3956
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская

Re: Баг после срабатывания RaiseException

Сообщение admin » Чт май 04, 2017 1:17 pm

Действительно, незачем вызывать RaiseException вне блока try. Только если по окну "Опа!" соскучились :) .

drts
Опытный
Сообщения: 279
Зарегистрирован: Сб окт 29, 2016 11:35 pm
Откуда: Новороссийск

Re: Баг после срабатывания RaiseException

Сообщение drts » Чт май 04, 2017 1:56 pm

Ладно ладно... Убедили. Просто был код. Работал. Переделал. Снова работает. Спасибо

jurist23rus
Эксперт
Сообщения: 2478
Зарегистрирован: Пт сен 30, 2016 9:42 am
Откуда: Майкоп

Re: Баг после срабатывания RaiseException

Сообщение jurist23rus » Чт май 04, 2017 2:17 pm

Скрин1.jpg
Скрин1.jpg (82.59 КБ) 1088 просмотров
Destiny is a very convenient word for those who never take decisions.

jurist23rus
Эксперт
Сообщения: 2478
Зарегистрирован: Пт сен 30, 2016 9:42 am
Откуда: Майкоп

Re: Баг после срабатывания RaiseException

Сообщение jurist23rus » Чт фев 15, 2018 3:59 pm

admin писал(а):Действительно, незачем вызывать RaiseException вне блока try. Только если по окну "Опа!" соскучились :) .


Вот как раз мой случай и не очень понятно поведение программы.

Я проверяю наличие файла на диске и если его нет, то генерирую исключение функцией RaiseException для того чтобы полностью прекратить выполнение скрипта и окно Опа мне как раз не нужно, я своё вывожу.

Я Использую RaiseException (ErNoError, '') и на моё удивление - нет окна Опа, но и выполнение скрипта не прерывается. Мне казалось правильным прерывать действие скрипта при любом вызове RaiseException.

Объясните почему в данном случае выполнение скрипта не останавливается?
Destiny is a very convenient word for those who never take decisions.

Аватара пользователя
admin
Разработчик
Сообщения: 3956
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская

Re: Обработка ошибок через вызов RaiseException

Сообщение admin » Чт фев 15, 2018 6:59 pm

Попробуйте не ErNoError, а что-то другое.

jurist23rus
Эксперт
Сообщения: 2478
Зарегистрирован: Пт сен 30, 2016 9:42 am
Откуда: Майкоп

Re: Обработка ошибок через вызов RaiseException

Сообщение jurist23rus » Чт фев 15, 2018 9:19 pm

Ну тогда будет Опа. В том и фокус, чтобы и выполнение скрипта остановить и Опа не выводилась. И erNoError как раз для этого и была задумана, как мне кажется. Но теперь почему-то превратилась просто в заглушку для Опы - это тоже нужно, но как же прервать выполнение скрипта?
Destiny is a very convenient word for those who never take decisions.

Аватара пользователя
admin
Разработчик
Сообщения: 3956
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская

Re: Обработка ошибок через вызов RaiseException

Сообщение admin » Чт фев 15, 2018 10:15 pm

Можно заключить код в try..except. Когда надо прервать вызовите RaiseException с какой-то ошибкой. Выполнение должно перейти в блок except. Вообщем, не видя код, трудно что-то подсказать.


Вернуться в «Вопросы по API DataExpress.»