我希望以递归方式运行*.mdb
个文件的目录,并搜索它们以查看哪些文件具有特定的链接表。
使用多个*.mdw
文件保护这些文件。我没有写任何一个,但我是他们的维护者。
我found a way to do this,但它过于互动;我需要它是非交互式的;因为我正在搜索的其中一些*.mdb
使用Autoexec宏。
根据我的理解,如果在打开时按住SHIFT键,则可以避免执行Autoexec宏;但我使用command line中的my macro来打开这些文件,似乎没有办法保存shift键。
我找到了另一个示例which does allow you to hold down the shift key to avoid the Autoexec macro(参见在打开数据库时绕过启动设置),但 不 允许您使用*.mdw
文件解锁数据库,因为OpenCurrentDatabase()方法没有*.mdw
文件的参数
答案 0 :(得分:3)
如果您的目标只是检查db文件是否包含特定的链接表,则可以使用ADO OpenSchema
方法。使用该方法,您无需在Access应用程序会话中打开db文件,因此AutoExec宏不会运行。
以下是使用后期绑定的示例。如果您喜欢早期绑定,我会留下评论说明。如果您的Access版本早于2007,请更改提供商。
由于您正在使用Access用户级安全性,因此您还必须调整连接字符串以包含MDW的路径并提供Access安全性用户名和密码。以下是ConnectionStrings.com中的示例连接字符串(使用Jet 4提供程序)。为了便于阅读,我将分号上的单行字符串分开:
Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=C:\mydatabase.mdb;
Jet OLEDB:System Database=system.mdw;
User ID=myUsername;
Password=myPassword;
Public Function HasLinkedTable(ByVal pDb As String, _
ByVal pTable As String) As Boolean
Const adSchemaTables = 20&
Dim cn As Object ' ADODB.Connection
Dim rs As Object ' ADODB.Recordset
Dim strConnect As String
Dim blnReturn As Boolean
strConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & pDb & ";"
'Set cn = New ADODB.Connection
Set cn = CreateObject("ADODB.Connection")
cn.Open strConnect
Set rs = cn.OpenSchema(adSchemaTables)
With rs
Do While Not .EOF
If !TABLE_NAME = pTable And !TABLE_TYPE = "LINK" Then
'Debug.Print !TABLE_NAME, !TABLE_TYPE
blnReturn = True
Exit Do
End If
.MoveNext
Loop
.Close
End With
cn.Close
Set cn = Nothing
HasLinkedTable = blnReturn
End Function