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