Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / On Error GoTo / 9 сообщений из 9, страница 1 из 1
04.02.2003, 00:42
    #32100664
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
On Error GoTo
Эта проблема, в принципе, у меня существовала всегда, но как-то не доставляла больших неудобств. Есть две процедуры (функции). В каждой используется обработчик ошибок On Error Goto lError, причем в обеих процедурах используется метка lError. Происходит не понятная мне ситуация: после выполнения первой процедуры, при возникновении ошибки в ходе выполнения второй процедуры, переход осуществляется НЕ на метку lError второй процедуры (в которой и происходит ошибка), что вроде бы очевидно должно происходить, а на метку первой процедуры, т.е. из второй функции сразу в первую. Пробовал на всех выходах из первой процедуры ставить On Error Goto 0 - не помогает. Причем с разными функциями работает по-разному: иногда правильно, а иногда так как я описал выше. Какой-либо закономерности увидеть здесь не могу, она просто не прослеживается. В некоторых случаях (опять же не могу установить, от чего это зависит),
даже если метки называются в процедурах по-разному, случаются подобные ситуации. Пока обработчиков было штук 10, я еще как-то справлялся, как-то пытался это обходить, но сейчас их штук 30-35, я совсем уже запутался. Обойтись без обработчиков не получится, ну, например, как еще отслеживать разрыв соединения с SQL Server'ом, для последующего его автоматического восстановления (приложение должно пытаться само его восстанавливать хоть в каких-то случаях, чтобы минимизировать вмешательство пользователя)
VB6 SP3
Короче, бред какой-то
...
Рейтинг: 0 / 0
04.02.2003, 10:50
    #32100740
mahoune
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
On Error GoTo
Я так думаю, что обрабатывается самое первое, по ходу выполнения программы, объявление OnError. А как следствие, если одна функция вызывают другую и в ней (во второй) возникает ошибка, то отработает OnError первой функции (если он был задан).
...
Рейтинг: 0 / 0
04.02.2003, 10:56
    #32100744
dao
dao
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
On Error GoTo
тоже долго бился над похожей ошибкой...
В итоги мои размышления после которых вроде всё коректо заработало..
Имеем что-то типа етого
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
sub1
...
on error goto L1
....
on error goto  0 
....
:L1
....
end sub
sub2
...
on error goto L1
....
call sub1
.....
on error goto  0 
....
:L1
....
end sub
 

Ну так вот: если в sub1 произошла ошибка - то мы переходим к обработчику-если после етого в обработчике произошла ошибка то нас выбросит в sub2.
Т.е. после перехода на обработчик ошибок on error goto отключается.
Внимательнее отслеживай переходы по on error goto.
Я после этого стал писать обработчики ошибок только после конструкции Exit sub .

Если не понятно обьяснил - спаршивай еще.
...
Рейтинг: 0 / 0
04.02.2003, 18:36
    #32101150
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
On Error GoTo
4 dao
а если так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Sub Command1_Click()
    On Error Goto lError
    ....
    Exit Sub
lError:
    ....
End Sub

Sub Command2_Click()
    On Error Goto lError
    ....
    Exit Sub
lError:
    ....
End Sub


при клике на вторую кнопку и при возникновении ошибки в Command2_Click попадает на lError в Command1
...
Рейтинг: 0 / 0
05.02.2003, 14:31
    #32101597
dao
dao
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
On Error GoTo
Ща проверю на отвлеченном примере.

Если нет вызовов из Command2_Click() Command1_Click() то по идеи не должно такого быть(хотя ручаться за ms...).
А часом в Command2_Click нет такой фишки - Command1.value=true ? или чего то подобного?
...
Рейтинг: 0 / 0
05.02.2003, 14:48
    #32101608
dao
dao
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
On Error GoTo
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Sub Command1_Click()
    On Error GoTo lError
     Call sub1
    Exit Sub
lError:
MsgBox  "err1" 
End Sub

Sub Command2_Click()
    On Error GoTo lError
     Call sub2
    Exit Sub
lError:
MsgBox  "err2" 
End Sub
Sub sub1()
k =  1  /  0 
End Sub
Sub sub2()
 Command1.Value = True
End Sub

Вот посмотри - такого варианта у тебя нет?
...
Рейтинг: 0 / 0
05.02.2003, 14:49
    #32101609
dao
dao
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
On Error GoTo
А вообщемто надо с кодом разбираться...
...
Рейтинг: 0 / 0
06.02.2003, 00:38
    #32101951
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
On Error GoTo
да вроде нет
ладно, покапаюсь в коде еще раз
если ни че не поможет, тогда выложу в этот топик
сэнкс
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
20.01.2011, 08:49
    #37068255
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
On Error GoTo
Я также изследовал 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 если он был установлен, если не был установлен, значит вызовет ошибку в программе и остановит программу.

Крутые повороты обсуждали сдесь
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / On Error GoTo / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]