我有一个访问数据库,在启动时我想检查链接数据库是否可用,所以我做了 以下内容:
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的主菜单中关闭数据库,然后从“最近的文件列表”中重新打开它。然后它会正常工作为什么是???
答案 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