У меня есть две процедуры procA и procB. procA вызывает procB. Исключение происходит в пределах procB. Я могу обработать исключение в procB, но мне нравится обрабатывать его в procA, и это то, что я не получил работать. Я не очень знаком с VB6, но я думаю, что это должно быть возможно, потому что MSDN говорит:
Если ошибка возникает, когда активен обработчик ошибок (между возникновением ошибки и оператором Resume, Exit Sub, Exit Function или Exit Property), обработчик ошибок текущей процедуры не может обработать ошибку. Управление возвращается к вызывающей процедуре. Если в вызывающей процедуре включен обработчик ошибок, он активируется для обработки ошибки.
Что я делаю не так?
Теперь фрагменты кода:
Private Sub procA()
On Error GoTo ErrHnd
...
procB obj
Exit Sub
ErrHnd:
MsgBox Err.Description, vbInformation, Me.caption
End Sub
Public Sub procB(ByRef rec As Object)
On Error GoTo ErrHnd
... Exception occurs within DAO Recordset Operation
Exit Sub
ErrHnd:
Select Case Err.Number
Case 3022
Err.Raise vbObjectError + 9999, Err.Source, "Error Text"
Case Else
...
End Select
End Sub
Я также пытался отключить обработку исключений в procB (On Error Goto 0), но кажется, что procA никогда не получает исключение.
Спасибо за вашу помощь.
Редактировать: Дополнительная информация:
- Исключение, возникшее из объекта DAO.Recordset.
- Я также пытался завершить удаление исключений в procB безрезультатно.
- procA существует в другом файле, а не procB (data.cls, frmListArtikel.frm).
Решение: Я не знал, что имеет значение, как выполняется программа. Если я запускаю его из IDE, исключение не обрабатывается procA. Если я запускаю EXE (ранее делавший его из IDE) из Проводника, Исключение обрабатывается как требуется procA.