Определить реальную причину сбоя ODBC (ошибка 3146) с помощью ms-access? - PullRequest
8 голосов
/ 08 апреля 2009

Мой клиент использует Access в качестве внешнего интерфейса для базы данных SQL Server. Недавно они начали получать ошибки ODBC - 3146 время от времени при запуске некоторых отчетов. Из того, что я могу сказать, это просто общая ошибка вызова ODBC.

Я попытался вставить некоторую обработку ошибок в сценарий VB, который запускает отчеты, но мне не повезло, получая дополнительную информацию об ошибках.

Код выглядит примерно так.

Public Function RunReports()
  On Error GoTo MyErrorTrap

  DoCmd.OpenReport "blah", acViewPreview
  DoCmd.Close

  DoCmd.OpenReport "foo", acViewPreview
  DoCmd.Close

Exit_function:
  Exit Function

MyErrorTrap:
  Dim errX As DAO.Error
  Dim MyError As Error
  If Errors.Count > 1   'This always seems to be 0, so no help
    For Each errX In DAO.Errors  'These are empty even if dont check for Errors.Count
      Debug.Print "ODBC Error"
      Debug.Print errX.Number
      Debug.Print errX.Description
    Next errX
  Else
    Debug.Print "VBA Error"
    Debug.Print Err.Number
    Debug.Print Err.Description
  End If

  'Also have tried checking DBEngine.Errors, but this is empty too

End Function

Я также включил трассировку на стороне ODBC, но это слишком затормозило, и я до сих пор не могу воссоздать ошибку ODBC.

Я полностью открыт для предложений по диагностике этого.

1 Ответ

13 голосов
/ 17 июня 2014

Используйте коллекцию DbEngine.Errors.

Sub Update_Temp()
On Error GoTo ErrorTrap
    ' Execute connect code at this point
Exit_errortrap:
    Exit Sub
ErrorTrap:
    Dim myerror As DAO.Error
    For Each myerror In DBEngine.Errors
        With myerror
            If .Number <> 3146 Then
                MsgBox .Description
            End If
        End With
    Next
    Resume Exit_errortrap

End Sub

Чтобы включить этот код, убедитесь, что в настройках VBA включена обработка ошибок.

...