【发布时间】:2020-07-08 15:41:37
【问题描述】:
我正在尝试通过 excel 文件中的 adodb vba 过程连接到使用传统加密的加密访问 2013 accdb 文件。
程序在 cn.open 失败,我使用的是 office 64 位,错误消息:“它不是有效的密码”。 这个问题的特殊性是,密码正确,我可以通过微软查询连接到Access DB就好了,我可以用下面的代码连接另一个Access DB。但是当我尝试在 Excel 上使用它时,会出现这个错误,请注意,我在 access 和 excel 上都启用了相同的引用 vba 编辑器。
我的问题是,我如何通过 excel 从这个受密码保护的访问文件中提取数据,我输入密码后尝试的每一种方法都失败了。
VBA程序
Sub LDBViewer2010()
'Reference Microsoft ActiveX Data Objects for this code to work
Dim cn As New ADODB.Connection
Dim Rs As New ADODB.Recordset
Const conDatabase As String = "E:\1.accdb"
' Open connection to Access backend
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & conDatabase & ";Persist Security Info=False;Jet OLEDB:Database Password='asd123';"
' Open recordset
Set Rs = cn.OpenSchema(adSchemaProviderSpecific, , "{947bb102-5d43-11d1-bdbf-00c04fb92675}")
'Output the field list
Debug.Print Rs.Fields(0).Name, "|", Rs.Fields(1).Name, "|", Rs.Fields(2).Name, "|", Rs.Fields(3).Name
'Loop through users recordset of users in database.
While Not Rs.EOF
Debug.Print Trim(Rs.Fields(0)), "|", Trim(Rs.Fields(1)), "|", Trim(Rs.Fields(2)), "|", Trim(Rs.Fields(3))
Rs.MoveNext
Wend
' Close
If Rs.State <> adStateClosed Then Rs.Close
Set Rs = Nothing
Set cn = Nothing
End Sub
非常感谢您的时间和帮助。
-编辑 1-
在 Access 中使用 debug.print CurrentProject.Connection.ConnectionString:
Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=E:1.accdb;Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database=C:\Users\User\AppData\Roaming\Microsoft\Access\System.mdw;Jet OLEDB:Registry Path=Software\Microsoft\Office\15.0\Access\Access Connectivity Engine;Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=6;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=True;Jet OLEDB:Bypass UserInfo Validation=False;Jet OLEDB:Limited DB Caching=False;Jet OLEDB:Bypass ChoiceField Validation=False
【问题讨论】:
-
connectionstrings 显示“注意! 报告称使用 Access 2010 - 2013 默认加密方案加密的数据库不适用于此连接字符串。在 Access 中;尝试选项并选择 2007 加密方法。这应该可以工作。我们不知道任何其他解决方案。“。
-
您必须为此使用 VBA 吗?不能使用 Excel 的内置功能从 access 数据库中获取数据吗?
-
嗨,Andy G,感谢您的帮助,我使用的是旧版加密,而不是新的 2010 - 2013 方案。此选项在文件->选项->客户端配置->加密方法->使用遗传加密中更改。
-
您可以通过自动化 Access 来解决此问题,例如打开一个新的 Access.Application 对象,在其中打开数据库,然后使用
app.CurrentProject.Connection获取有效的 ADODB 连接。 -
你可以使用那个 Access 文件中的
Debug.Print CurrentProject.Connection.ConnectionString顺便说一句吗?然后我们就可以看到Access是如何连接数据库的了。