powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Проблемы с "On Error GoTo label"
12 сообщений из 12, страница 1 из 1
Проблемы с "On Error GoTo label"
    #32144952
vinni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть примерно такой код:
Надо проинсертить две таблицы, если какойто из них нет действие не должно происходить

On Error GoTo label
DoCmd.TransferDatabase acImport, "Microsoft Access", "c:\fin2003\fin2003_3.mdb", acTable, "rahunok", "rahunok"
...

label:

On Error GoTo Label1
DoCmd.TransferDatabase acImport, "Microsoft Access", "c:\fin2003\fin2003_3.mdb", acTable, "kod_nom_rozp", "kod_nom_rozp"

....

Label1:
...

Если нет первой таблици то первая ошибка пропускаеться(делает то что надо), и если нету второй, то выдает сообщение что нету такойто таблицы.
А должно также пропустить эту ошибку. Наверное гдето надо сбросить первую ошибку.
Подскажите что делать
...
Рейтинг: 0 / 0
Проблемы с "On Error GoTo label"
    #32144967
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я обычно использую следующий алгоритм обработки ошибок:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
On Error Resume Next ' отключаем обработку ошибок
'Идут Оператор(ы) к-ые могут вызвать ошибку
If err.number<> 0  then ' или select case err.number - смотря какая логика
'Обработка ошибки
err.clear 'очищаем стек ошибки
else
'нету ошибки
end if

On Error Goto  0  'Отключаем пропус ошибок (Resume Next)

Оператор(ы)

On Error Resume next
If err.number<>0 then ' или select case err.number
'Обработка ошибки
err.clear 'очищаем стек ошибки
else
'нету ошибки
end if

On Error Goto 0 'Отключаем пропус ошибок (Resume Next) 



В твоем случае можно (наверное) просто вставить
Err.Clear
On Error Goto 0
После того места где могла бы быть ошибка
...
Рейтинг: 0 / 0
Проблемы с "On Error GoTo label"
    #32145039
vinni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все сделал так, всеравно відает ошибку
...
Рейтинг: 0 / 0
Проблемы с "On Error GoTo label"
    #32145052
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конструкция
Код: plaintext
1.
2.
3.
On Errror Goto Labe
...
Label:
On Error Goto Label1

нежизнеспособна в принципе. После первой ошибки программа переходит в режим обработки ошибок и никакие обработчики (второй On Error) не действуют. Т.е. если в обработчике случается ошибка - она бросается вверх/валится в код. Нужно выходить из обработчика с помощью волшебного слова Resume.
...
Рейтинг: 0 / 0
Проблемы с "On Error GoTo label"
    #32145461
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Согласен с Лохом (простите, что без батюшки). Есть идея: поскольку там идут подряд два совершенно однотипных куска, то можно написать подпрограмму, в ней обработчик ошибок, и обращаться к ней два раза. При каждом очередном входе обработчик будет срабатывать как надо.
...
Рейтинг: 0 / 0
Проблемы с "On Error GoTo label"
    #32145560
boar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем городить огород?
просто можно проверить есть ли там файл...
Код: plaintext
if Len(Dir( "C:\aaa\aaa.mdb" ))= 0  then Msgbox  "File not found!!!" 
...
Рейтинг: 0 / 0
Проблемы с "On Error GoTo label"
    #32145609
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 vinni
>Все сделал так, всеравно відает ошибку
Че ты сделал из двух вариантов? Опять мне гадать?

2 All
Что вы привязались к меткам. Есть нормальный способ обхода (почти как Try в VB.Net). Дал пример. Даю ище один. Все обрабатывается.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Private Sub sw()
    Dim i                          As Integer
    On Error Resume Next
    i = i /  0 
    If err.Number <>  0  Then
        Debug.Print  "Ошибка!" 
        i =  0 
        err.Clear
        On Error GoTo  0 
    Else
        Debug.Print  "Странно. Нет ошибки" 
    End If

    On Error Resume Next
    i = i /  0 
    If err.Number <>  0  Then
        Debug.Print  "Ошибка!" 
        err.Clear

    Else
        Debug.Print  "Странно. Нет ошибки" 
    End If
End Sub
...
Рейтинг: 0 / 0
Проблемы с "On Error GoTo label"
    #32145624
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С On Error Resume Next разумеется все будет обрабатываться :)
Только зачем тебе два раза On Error Resume Next писать? Напиши один раз в начале функции, и живи себе спокойно, никаких ошибок никогда не будет :)
...
Рейтинг: 0 / 0
Проблемы с "On Error GoTo label"
    #32145649
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Лоху Позорному
Из хелпа:
On Error GoTo 0 - Disables any enabled error handler in the current procedure.
Убираем 2-ой Resume Next - получаем ошибку. Так что жить спокойно не получиться. А вот err.clear - можно было бы и не писать - но так красивее и правильней (IMHO)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Private Sub sw()
    Dim i                          As Integer
    On Error Resume Next
    i = i /  0 
    If err.Number <>  0  Then
        Debug.Print  "Ошибка 1 !"
        i =  0 
        err.Clear
        On Error GoTo  0 
    Else
        Debug.Print  "Странно. Нет ошибки" 
    End If
'    On Error Resume Next ' Убираем, тогда
    i = i /  0  ' БУДЕТ ОШИБКА
    If err.Number <>  0  Then
        Debug.Print  "Ошибка 2 !"
        err.Clear
        On Error GoTo  0 
    Else
        Debug.Print  "Странно. Нет ошибки" 
    End If
End Sub

...
Рейтинг: 0 / 0
Проблемы с "On Error GoTo label"
    #32145650
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так зачем тебе On Error Goto 0? Чтобы потом On Error Resume Next писать?
...
Рейтинг: 0 / 0
Проблемы с "On Error GoTo label"
    #32145658
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще раз, чтобы о разных вещах не спорить.
В том коде, который привел винни, проблема в том, что если мы находимся внутри обработчика ошибки, то накакие On Error'ы не действуют (в том числе On Error Resume Next). Решать эту проблему можно по разному - или глобальным Resume Next, или нормальным обработчиком типа
Public Sub Test()
On Error Goto Err_Handler
DoCmd.TransferDatabase ' В 1-й файл
DoCmd.TransferDatabase ' Во 2-й файл

Exit Sub

Err_Handler:
If err.Number=... Then' Файл не найден
Resume Next
Else
err.Raise err.Numer,,err.Description
End If
End Sub
...
Рейтинг: 0 / 0
Проблемы с "On Error GoTo label"
    #32145676
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Так зачем тебе On Error Goto 0? Чтобы потом On Error Resume Next писать?

Точно! Пока отлаживаю - не знаю где что вылезет.
Есть обрабатываемая ошибка - ОК, нет обрабатываемой ошибки - надо обработать - ставлю On Error Resume Next IIF Err.Number.... И так далее
On Error Resume Next - вещь вредная и опасная. Запросто можно пропустить серьезную (не обрабатываемую) ошибку.
On Error Goto 0 - решает эту проблему.
Так что, извините, что сразу не объяснил (думал все знают )
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Проблемы с "On Error GoTo label"
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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