2

我想通过*.mdb文件目录递归运行并搜索它们以查看哪些文件具有特定的链接表。

这些文件使用多个*.mdw文件进行保护。我没有写任何一个,但我是他们的维护者。

找到了一种方法来做到这一点,但它太互动了;我需要它是非交互式的;因为其中一些*.mdb我正在搜索使用 Autoexec 宏。

据我了解,如果在打开宏时按住 SHIFT 键,则可以避免执行 Autoexec 宏;但是我在宏中使用命令行打开这些文件,似乎没有办法按住 shift 键。

我找到了另一个示例,它确实允许您按住 shift 键以避免 Autoexec 宏(请参阅打开数据库时绕过启动设置),但它不允许您使用*.mdw文件解锁数据库,因为OpenCurrentDatabase ()方法没有*.mdw文件的参数

4

1 回答 1

3

如果您的目标只是检查 db 文件是否包含特定的链接表,则可以使用 ADOOpenSchema方法。使用这种方法,您无需在 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
于 2013-05-21T17:21:36.717 回答