数据库检查表格后MS访问不会打开

时间:2016-05-02 16:47:41

标签: vba ms-access access-vba

我有一个访问数据库,在启动时我想检查链接数据库是否可用,所以我做了 以下内容:

cDBPath = Application.CurrentProject.Path
Set db = CurrentDb
Dim Relink_Tables
Dim rsCheckLink As Recordset
Relink_Tables = False

For Each tdf In db.TableDefs
     If Len(tdf.Connect) > 0 Then
        'Linked table - test link is current
            DoCmd.Echo False, "Checking link for table " & tdf.Name
            On Error Resume Next 'Do not stop script on error
            Set rsCheckLink = db.OpenRecordset(tdf.Name) ' OPEN TABLE
            If Err.Number <> 0 Then ' COULD NOT OPEN TABLE
                On Error GoTo 0
                Relink_Tables = True
                'GoTo Relink_Tables ' RECONNECT TO APPROPIATE DATABASE
            Else
                On Error GoTo 0
                rsCheckLink.Close ' CLOSE TABLE THAT DID OPEN
                Set rsCheckLink = Nothing
            End If
    End If
Next

If Relink_Tables = True Then
   Reling_DB...
End If

该部分工作正常,问题是之后我尝试打开我的主窗体,如:DoCmd.OpenForm "MyForm",但它不会打开(如果我通过双击文件打开数据库)nly如果我从Access的主菜单中关闭数据库,然后从“最近的文件列表”中重新打开它。然后它会正常工作为什么是???

1 个答案:

答案 0 :(得分:1)

我的猜测是表单确实打开了,但由于这一行而没有显示:

DoCmd.Echo False, "Checking link for table " & tdf.Name

如果关闭屏幕输出,则必须100%确定代码是否正常工作,并且在所有情况下(包括错误情况)都将其重新打开。

实际上我根本没有理由把Echo转到这里。

要显示状态消息,并打开沙漏光标,我在公共模块中有这样的功能:

' Show (strStatus <> "") or remove (strStatus = "") a statusbar message
Public Sub StatusMsg(strStatus As String, Optional bHourglass As Boolean = False)

    On Error Resume Next

    If strStatus = "" Then
        SysCmd acSysCmdClearStatus
    Else
        SysCmd acSysCmdSetStatus, strStatus
    End If

    DoCmd.Hourglass bHourglass
    DoEvents

End Sub

并将其称为

StatusMsg "Doing some lengthy stuff", True
' some lengthy stuff here
StatusMsg "", False