sysrepos
Зарегистрирован: 22.10.2012 Сообщения: 39
|
Добавлено: Вт Май 28, 2013 11:41 am Заголовок сообщения: помогите с обработкой ошибки |
|
|
помогите пожалуйста разобраться с обработчиком ошибок (справку читал)
вариант1:
Код: |
Sub proc1
Dim str As String
OnError GoTo no_states
Open Table "red1"
no_states:
note "error"
str=FileOpenDlg("","","TAB","opn states ")
resume after_mapfrom
after_mapfrom:
OnError GoTo 0
note "продолжение программы"
End Sub
|
в первом варианте в случае возникновения ошибки (при невозможности открыть файл, обработчик правильно срабатывает)
а вот в случае если Open Table "red1" смог открыть таблицу, то выдается сообщение
"Встретился оператор Resume вне обработчика ошибок. Программа прервана."
вариант2
Код: |
Dim str As String
OnError GoTo no_states
str = "red1"
after_mapfrom:
Open Table str
OnError GoTo 0
Exit Sub
no_states:
str=FileOpenDlg("","","TAB","Открытие таблицы states ")
resume after_mapfrom
|
во 2 варианте, при возможности открыть таблицу, таблица открывается, если нет, то обработчик срабатывает
и таблица открывается с помощью FileOpenDlg, но если в диалоге FileOpenDlg - нажать отмена то опять открывается
диалог FileOpenDlg
Как в таких случаях нужно правильно писать код, чтобы ошибки обрабатывались корректно? |
|
thegeo
Зарегистрирован: 17.01.2012 Сообщения: 119
|
Добавлено: Вт Май 28, 2013 12:57 pm Заголовок сообщения: |
|
|
м.б. так
Sub proc3
Dim str As String
str = "red1"
OnError GoTo er1
start2:
Open Table str
OnError GoTo 0
note "продолжение программы"
exit sub
er1:
str=FileOpenDlg("","","TAB","Открытие таблицы states")
if len(str)=0 then exit sub end if
resume start2
End Sub |
|