网络访问中断时无法保存到本地表。

时间:2015-01-09 17:04:21

标签: vba ms-access access-vba

我有一个拆分数据库,后端位于远程;当我收到错误“网络访问已被中断”时,我想在本地表上记录某些内容以供将来访问。在为此创建系统后,我发现当连接丢失到远程后端时,本地表也变得无法访问。

虽然我认为没有必要解决这个问题,但我想找出为什么本地表格无法访问时显然不应该使用网络连接。以下是我用来尝试在本地登录的函数的代码。

Public Function LogTempError(ByVal lngErrNumber As Long, _
                         ByVal strErrDescription As String, _
                         strCallingProc As String, _
                         Optional varParameters As Variant, _
                         Optional blnSHOW_USER As Boolean = True) As Boolean

On Error GoTo Err_Handler

    'Set warnings to True just in case the error happened while they were set to false.
    DoCmd.SetWarnings True
    Dim rs As DAO.Recordset

Set rs = DBEngine(0)(0).OpenRecordset("TempErrorTable", dbOpenDynaset, dbAppendOnly)

    With rs
        .AddNew
            !ERROR_LOG_NUMBER = lngErrNumber
            !ERROR_LOG_USERID = NetworkUserName()
            !ERROR_LOG_DESCRIPTION = strErrDescription & " logged from Temp Table"
            !ERROR_LOG_TIMESTAMP = Now()
            !ERROR_LOG_FORM = strCallingProc
        .Update
    End With


Exit_Handler:
On Error Resume Next
    rs.Close
    Set rs = Nothing

    Exit Function

Err_Handler:
    If DateDiff("s", dteLAST_ERROR_TIME, Now()) > 20 Or lngLAST_ERROR_NUMBER <> lngErrNumber Then

        ' If there are more errors that can't be logged, simply email the errors.
        SendEmail "First Unloggable error", "Error Num: " & Err.Number & " Error Description: " & strErrDescription & " From: " & strCallingProc
        SendEmail "Second Unloggable error", "Error Num: " & Err.Number & " Error Description: " &     Err.Description & " From: " & strCallingProc

        MsgBox "An error occured that wasn't able to be logged, a message was sent to Database Administrator on your behalf.", vbInformation, "Notification Sent"

End If

Resume Exit_Handler
End Function

1 个答案:

答案 0 :(得分:0)

尝试这个稍微简化的版本,在首次使用时打开与TempErrorTable的连接,并保持连接打开。让它停在LogTempError中的错误上,这样你就可以看到TempErrorTable更新失败的地方。

Public Function LogTempError(ByVal lngErrNumber As Long, _
                     ByVal strErrDescription As String, _
                     strCallingProc As String, _
                     Optional varParameters As Variant, _
                     Optional blnSHOW_USER As Boolean = True) As Boolean
Static rs As Recordset
On Error GoTo 0
DoCmd.SetWarnings True
If rs Is Nothing Then       ' open recordset on first use
    Set rs = CurrentDb.OpenRecordset("TempErrorTable", dbOpenDynaset, dbAppendOnly)
End If
With rs
  .AddNew
    !ERROR_LOG_NUMBER = lngErrNumber
    !ERROR_LOG_USERID = NetworkUserName()
    !ERROR_LOG_DESCRIPTION = strErrDescription & " logged from Temp Table"
    !ERROR_LOG_TIMESTAMP = Now()
    !ERROR_LOG_FORM = strCallingProc
  .Update
End With
Exit Function