VB6 Обработка исключений в вызывающей процедуре - PullRequest
3 голосов
/ 02 августа 2010

У меня есть две процедуры 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.

Ответы [ 2 ]

4 голосов
/ 02 августа 2010

Одновременно может быть только один активный обработчик ошибок. Если вы активируете в procb, procb справится.

вам также может понадобиться проверить настройки вашего редактора. выберите опцию «Инструменты> Параметры> вкладка Общие» «Разрыв в модуле класса»

Пример кода 1. Вы получите ошибку 6 в procA:

Private Sub Form_Load()
    Call procA
End Sub

Private Sub procA()
    On Error GoTo errhan
    procB
    Exit Sub
errhan:
    Debug.Print "proca handle"
End Sub

Private Sub procB()
    Err.Raise 6
End Sub

Пример кода 2. Вы получите ошибку 7 в procA:

Private Sub Form_Load()
    Call procA
End Sub

Private Sub procA()
    On Error GoTo errhan
    procB
    Exit Sub
errhan:
    Debug.Print "proca handle"
End Sub

Private Sub procB()
    On Error GoTo errhan
    Err.Raise 6
errhan:
    Err.Raise 7
End Sub
1 голос
/ 22 июля 2013

Проверьте настройки редактора и выберите параметр «Инструменты> Параметры> вкладка« Общие »» «Устранение необработанных ошибок»

проверьте эту ссылку: http://www.fmsinc.com/tpapers/vbacode/debug.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...