
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.188] |
![]() |
|
Сообщ.
#1
,
|
|
|
народ что то я не пойму!! как програмно в try .. except .. end вызвать ошибку?
|
Сообщ.
#2
,
|
|
|
StrToInt('bla-bla-bla');
![]() |
Сообщ.
#3
,
|
|
|
да нет.
![]() ![]() ![]() try работа if неверные данные !перейти в except с ошибкой! except log(записать ошибку) end; |
Сообщ.
#4
,
|
|
|
if не рулит. Если будет исключение, то программа сама попадет в секцию except.
|
Сообщ.
#5
,
|
|
|
![]() ![]() raise Exception.Create; |
Сообщ.
#6
,
|
|
|
Цитата vladimir74 @ vladimir74 Ты наверное не понимаешь сам принцип работы try... except... Никаких if не надо! Даже если у тебя в try несколько действий, они будут выполняться по очереди до тех пор, пока не возникнет ошибка. Если ошибка возникнет, программа сама перейдет в except... Тебя это что ли интересует?? А уже обрабатывать ошибку (и записывать ее в лог) - это твои заботы! Чтобы разобраться по какой ошибке приложение перешло в except, можешь в try использовать какой-нибудь флаг, который будет тебе однозначно давать понять, на каком действии произошел сбой. |
Сообщ.
#7
,
|
|
|
стоп!!!!
if это моя проверка данных!!!! т.е. если мне данные не понравились, должна вызваться ошибка!! |
Сообщ.
#8
,
|
|
|
Блин, тебе объясняют, что try...except сам отловит исключение. Без всяких if. Засунь в try мой пример из второго поста и посмотри, что будет
![]() |
Сообщ.
#9
,
|
|
|
Smike
try что то пишем, потом проверяем и если не нравится то raise Exception.Create('очень плохие данны мы не пишем '); except on E: Exception do begin ShowMessage('Ошибка! '+E.Message); end; end; не работает... ![]() Добавлено Цитата Сан Иваныч @ Блин, тебе объясняют, что try...except сам отловит исключение. Без всяких if. Засунь в try мой пример из второго поста и посмотри, что будет блин да я же говорю, что нет в этот момент никаких исключений!! не буду же я на ноль делить, чтоб его вызвать или сравнивать строку с числом!!! глупо это |
Сообщ.
#10
,
|
|
|
vladimir74, то, что ты предлагаешь, можно написать и без исключений. Например, при преобразовании StrToInt проверяешь строку на входе на наличие в ней нечисловых символов, и если таковые будут найдены - пиши, что данные плохие.
|
Сообщ.
#11
,
|
|
|
как бы правильно обьяснить
есть общий try ... except end в нем транзакция, с rollback в except end. и записью в лог вида ошибки. Выход из масива, неактивная таблица и т.д. эти исключения try найдет сам, для того он и создан. но мне надо проверить на едентичность данных, и переписать таблицу только в определенном случае. Теоретически этой ошибки произойти не может, но на практике, один раз произошло и данные записались не верно ![]() не писать же после каждой проверки свой rollback . А в лог должно писаться почему вызвана ошибка |
Сообщ.
#12
,
|
|
|
А в событии BeforePost() нельзя проверить? И если найдены ошибки, то Abort() и никаких проблем!
|
Сообщ.
#13
,
|
|
|
Сан Иваныч
но ведь это не красиво, и если у меня несколько таких проверок (в моем случае 3) то хочется в логе видеть какая именно проверка пошла боком... |
Сообщ.
#14
,
|
|
|
Да хоть десять проверок. Именно в BeforePost() пишешь
![]() ![]() try StrToInt(str); except ShowMessage('Неверное значение .....'); WriteToLog('ошибка в типе данных для поля XXX'); Abort(); end; // и так для всех проблемных полей |
Сообщ.
#15
,
|
|
|
Цитата Сан Иваныч @ А в событии BeforePost() нельзя проверить? И если найдены ошибки, то Abort() и никаких проблем! нет тут процедура связываюшая около 10 таблиц когда insert, когда edit. сильно много проверять придется. Ладно, если ничего такого нет, придется переписывать процедуру, или 3 раза писать rollback и лог..... ![]() |
Сообщ.
#16
,
|
|
|
![]() ![]() procedure TForm1.Button1Click(Sender: TObject); var n,m: Integer; begin n := 18; m := 6; try n := n div m; if n=2 then Raise Exception.Create('Error Data2'); if n=3 then Raise Exception.Create('Error Data3'); except on E: Exception do ShowMessage(E.Message); end; end; |
Сообщ.
#17
,
|
|
|
Демо
и у тебя это работает?? у меня то же самое не сработало!!!!!!! Добавлено бдин ИДИОТ!!! вопрос решен!! вернее я все правильно делал!!! просто у меня был дебаг модус включен... а потом я не должлался своего окна ![]() все работает правильно Добавлено на этом вопрос решен |