【问题标题】: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
【问题描述】:
【问题讨论】:
标签:
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