我正试图通过Excel VBA打开一个到受密码保护的AccessDB的连接。
我正在使用以下连接字符串
conn.Provider = "Microsoft.ACE.OLEDB.12.0"
conn.ConnectionString = "Data Source=dbPath; Jet OLEDB:Database Password=pwd;"
其中dbPath是accdb/mdb文件的路径,pwd是数据库文件的密码。密码是绝对正确的,但我总是收到错误"不是有效密码"。有人能给我指引一下吗??-斯里兰卡。
其他信息:我使用的是office 2010,并将此数据库保存为mdb(2003)文件(我也尝试使用accdb-extn保存此文件)。当我试图为数据库设置密码时,它显示消息"使用块密码加密与行级锁定不兼容。行级锁定将被忽略。"这与VBA中的错误消息有关吗?
在Access 2010中,数据库密码的加密方法发生了更改,ADO提供程序的"Jet OLEDB:数据库密码"关键字似乎不适用于新方法。在这里,我必须删除密码,进入Access->File->Options->Client Settings->Advanced并选中"use legacy encryption",然后重新创建密码。
我不知道ACE提供程序是否有任何新的OLE DB连接字符串关键字,也不知道使用ADO.NET 时是否也会出现此问题
请使用以下
conStr=";提供商=Microsoft.ACE.OLEDB.16.0;数据源=C:\Users\csub1\Desktop\empdata.xlsx;持久安全信息=False;Jet OLEDB:数据库密码=pass@123;扩展属性='12.0除外;HDR=是;';Jet OLEDB:系统数据库=C:\Users\csub1\AppData\Roaming\Microsoft\Access\System.mdw"
请找到System.mdw文件,并在系统数据库下给出它。在提供密码时,请使用Jet OLEDB:数据库密码。
经过大量研究,它奏效了。
或者您可以这样做。
conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath & ";Jet OLEDB:Database Password=" & pwd
我注册到stackoverflow只是为了感谢MNS CHANDRACEKARAN!由于我刚刚注册,我不能标记为答案并将其作为我的答案。在谷歌上搜索了很长时间都没有成功后,我尝试了他的建议,结果对我很有效。我没有包括他的连接字符串的扩展属性和系统数据库部分,并且能够从Access前端数据库FE(前端)连接到其BE(后端),然后通过连接对象创建一个新表。我很高兴收到帮助,为此我的代码如下:
...
Dim conn As New ADODB.Connection
Dim constr As String
Dim sqlstr as String
constr = "provider=Microsoft.ACE.OLEDB.16.0;data source=\yournetworkpathyourfilename.accdb;Persist Security Info=False;Jet OLEDB:Database Password=yourpassword;'"
conn.Open constr, "", "", -1
sqlstr = "CREATE TABLE TableName (TblField1name TEXT(20) NOT NULL, TblField2name BIT ) "
conn.Execute sqlstr
conn.Close
...
由于在谷歌搜索时,我发现密码保护数据库(比如说"旧方法")和加密数据库之间存在一些混淆,我想指定此解决方案适用于2007-2016 Access加密数据库。如果不是这种情况,您可能会发现引用dao数据库对象的opendatabase方法更容易。