|
On Error GoTo
|
|||
---|---|---|---|
#18+
Эта проблема, в принципе, у меня существовала всегда, но как-то не доставляла больших неудобств. Есть две процедуры (функции). В каждой используется обработчик ошибок On Error Goto lError, причем в обеих процедурах используется метка lError. Происходит не понятная мне ситуация: после выполнения первой процедуры, при возникновении ошибки в ходе выполнения второй процедуры, переход осуществляется НЕ на метку lError второй процедуры (в которой и происходит ошибка), что вроде бы очевидно должно происходить, а на метку первой процедуры, т.е. из второй функции сразу в первую. Пробовал на всех выходах из первой процедуры ставить On Error Goto 0 - не помогает. Причем с разными функциями работает по-разному: иногда правильно, а иногда так как я описал выше. Какой-либо закономерности увидеть здесь не могу, она просто не прослеживается. В некоторых случаях (опять же не могу установить, от чего это зависит), даже если метки называются в процедурах по-разному, случаются подобные ситуации. Пока обработчиков было штук 10, я еще как-то справлялся, как-то пытался это обходить, но сейчас их штук 30-35, я совсем уже запутался. Обойтись без обработчиков не получится, ну, например, как еще отслеживать разрыв соединения с SQL Server'ом, для последующего его автоматического восстановления (приложение должно пытаться само его восстанавливать хоть в каких-то случаях, чтобы минимизировать вмешательство пользователя) VB6 SP3 Короче, бред какой-то ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2003, 00:42 |
|
On Error GoTo
|
|||
---|---|---|---|
#18+
Я так думаю, что обрабатывается самое первое, по ходу выполнения программы, объявление OnError. А как следствие, если одна функция вызывают другую и в ней (во второй) возникает ошибка, то отработает OnError первой функции (если он был задан). ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2003, 10:50 |
|
On Error GoTo
|
|||
---|---|---|---|
#18+
тоже долго бился над похожей ошибкой... В итоги мои размышления после которых вроде всё коректо заработало.. Имеем что-то типа етого Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Ну так вот: если в sub1 произошла ошибка - то мы переходим к обработчику-если после етого в обработчике произошла ошибка то нас выбросит в sub2. Т.е. после перехода на обработчик ошибок on error goto отключается. Внимательнее отслеживай переходы по on error goto. Я после этого стал писать обработчики ошибок только после конструкции Exit sub . Если не понятно обьяснил - спаршивай еще. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2003, 10:56 |
|
On Error GoTo
|
|||
---|---|---|---|
#18+
4 dao а если так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
при клике на вторую кнопку и при возникновении ошибки в Command2_Click попадает на lError в Command1 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2003, 18:36 |
|
On Error GoTo
|
|||
---|---|---|---|
#18+
Ща проверю на отвлеченном примере. Если нет вызовов из Command2_Click() Command1_Click() то по идеи не должно такого быть(хотя ручаться за ms...). А часом в Command2_Click нет такой фишки - Command1.value=true ? или чего то подобного? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2003, 14:31 |
|
On Error GoTo
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Вот посмотри - такого варианта у тебя нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2003, 14:48 |
|
On Error GoTo
|
|||
---|---|---|---|
#18+
А вообщемто надо с кодом разбираться... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2003, 14:49 |
|
On Error GoTo
|
|||
---|---|---|---|
#18+
да вроде нет ладно, покапаюсь в коде еще раз если ни че не поможет, тогда выложу в этот топик сэнкс ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2003, 00:38 |
|
On Error GoTo
|
|||
---|---|---|---|
#18+
Я также изследовал On Error GoTo и по тестам сделал такой вывод: Например, есть Sub1, SUB2, SUB3. К примеру Sub2 вложена в Sub1, Sub3 в Sub2 В процедуру Sub1 поместил On Error GoTo Метка1, в Sub2 - On Error GoTo Метка2, в Sub3 - ничего Если в Sub1 процедуре вызвать ошибку - сработает Метка1 Если в Sub2 процедуре вызвать ошибку - сработает Метка2 Если в Sub3 процедуре вызвать ошибку - сработает Метка2 из Sub2 (тоесть то обьявление которое было последнее) Все вложенные (даже если много раз) функции и процедуры будут продолжать работоспособность обьявленого On Error. Если выйти из процедуры в которой был обьявлен On Error, то "условие на ошибку" перестанет работать и будет задействовано предыдущий On Error если он был установлен, если не был установлен, значит вызовет ошибку в программе и остановит программу. Крутые повороты обсуждали сдесь ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2011, 08:49 |
|
|
start [/forum/search_topic.php?author=Segler&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
122ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
others: | 626ms |
total: | 851ms |
0 / 0 |