Ms access 数据库检查后的MS访问表单无法打开

Ms access 数据库检查后的MS访问表单无法打开,ms-access,vba,Ms 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 'Lin

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

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
cDBPath=Application.CurrentProject.Path
Set db=CurrentDb
Dim Relink_表
Dim rsCheckLink作为记录集
重新链接表格=错误
对于以db.TableDefs为单位的每个tdf
如果Len(tdf.Connect)>0,则
'链接表-测试链接为当前链接
DoCmd.Echo False,“检查表的链接”&tdf.Name
错误时继续下一步“错误时不停止脚本”
设置rsCheckLink=db.OpenRecordset(tdf.Name)'打开表
如果错误号为0,则“无法打开表”
错误转到0
重新链接表=真
“转到重新链接_表”重新连接到相应的数据库
其他的
错误转到0
rsCheckLink.Close“关闭已打开的表”
设置rsCheckLink=Nothing
如果结束
如果结束
下一个
如果Relink_Tables=True,则
重新安装数据库。。。
如果结束

这部分工作正常,问题是在那之后我尝试打开我的主窗体,如:
DoCmd.OpenForm“MyForm”
,但它不会打开(如果我双击文件打开数据库)只有当我从Access的主菜单中关闭DB,然后从“最近使用的文件列表”中重新打开它时,它才能正常工作。为什么会这样?

我猜表单确实打开了,但没有显示,因为这行:

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