检查前端和后端Access数据库之间的有效连接

时间:2019-09-03 14:01:24

标签: vba ms-access access-vba backend

我有一个Access数据库应用程序,该应用程序分为前端和后端。后端位于所有用户都可以访问的共享网络驱动器上。我的问题是,当用户启动此应用程序的前端时,由于共享驱动器可能未在本地安装而没有与后端的连接,因此启动该应用程序时将显示的初始表单没有打开并让用户质疑发生了什么。我已经有代码检查后端是否已连接,尽管由于某种原因,当未连接后端时,从不显示简介屏幕表单,而访问应用程序仅位于那里

Private Sub Form_Open(Cancel As Integer)
    Dim strBackEndPath, LResult As String
    Dim i, j, lenPath As Integer

    'initialize variable status to 0
    Me.BEDB_Status = 0
    'define what to check in backend database
    strBackEndPath = CurrentDb.TableDefs("VersionInfo-Available").Connect

    ' Now remove the datebase  & password prefix
    j = InStrRev(strBackEndPath, "=") + 1
    strBackEndPath = Mid(strBackEndPath, j)

    'Checking access to Backend database files...
    Me.MessageText = "Checking access to Backend database files..."
    On Error Resume Next
    LResult = Dir(strBackEndPath)
    'Set status to Length of LResult
    Me.BEDB_Status = Len(LResult)

    'Check length of BEDB_Status, if greater than 0, backend is connected. If 0, backend is not connected.
    If Me.BEDB_Status > 0 Then
        'length is greater than 0 so continue opening the app
        DoCmd.OpenForm "IntroScreen"
    Else
        'length is 0 so backend is not connected. Alert user and quit the app
        Me.MessageText = "The database isn't currently accessible. Program will now exit. Please ask the support team for assistance"
        DoCmd.Quit acQuitSaveNone
    End If

End Sub

2 个答案:

答案 0 :(得分:1)

尝试打开链接表之一并忽略该错误可能更简单,也更快得多:

Public Function IsLinkedTable(ByVal TableName As String) As Boolean

    Dim LinkOk  As Boolean

    On Error Resume Next
    LinkOk = (DCount("*", TableName) >= 0)

    IsLinkedTable = LinkOk

End Function

并使用表单的 OnLoad 事件,因为这样可以打开表单。

答案 1 :(得分:0)

实施了古斯塔夫(Gustav)建议使用On Load事件而不是On Open事件及其IsLinkedTable函数,并且效果很好。

感谢古斯塔夫。