【问题标题】:Emulating a SHIFT key press when using VBA to open an ms-access database secured by an mdw file?使用VBA打开由mdw文件保护的ms-access数据库时模拟SHIFT键?
【发布时间】:2013-05-16 11:36:55
【问题描述】:

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

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

我有found a way to do this,但它太互动了;我需要它是非交互式的;因为其中一些*.mdbs 我正在搜索使用 Autoexec 宏。

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

我找到了另一个示例,which does allow you to hold down the shift key to avoid the Autoexec macro(请参阅打开数据库时绕过启动设置),但是不允许你用*.mdw文件解锁数据库,因为OpenCurrentDatabase()方法没有*.mdw文件的参数

【问题讨论】:

    标签: security ms-access mdw autoexec


    【解决方案1】:

    如果您的目标只是检查一个 db 文件是否包含特定的链接表,您可以使用 ADO OpenSchema 方法。使用这种方法,您无需在 Access 应用程序会话中打开 db 文件,因此 AutoExec 宏不会运行。

    以下是使用后期绑定的示例。如果您更喜欢早期绑定,我会留下评论说明。如果您的 Access 版本早于 2007,请更改 Provider

    由于您使用的是 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
    

    【讨论】:

    • +1 是一种比我要建议的更优雅的方法。 (这是荷马辛普森在worked from home 时使用的一种变体,结果对他来说并不是那么好。)
    • (荷马使用drinking bird为他按下“Y”键,这样他就不必费心回答那些讨厌的“你确定吗?(Y/N)”提示。)
    猜你喜欢
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 2021-05-01
    相关资源
    最近更新 更多