Excel ADODB VBA错误信息“不是有效密码”

4
我将尝试通过Excel VBA连接到密码保护的AccessDB。以下是我使用的连接字符串。
conn.Provider = "Microsoft.ACE.OLEDB.12.0"
conn.ConnectionString = "Data Source=dbPath; Jet OLEDB:Database Password=pwd;"

其中dbPath是accdb/mdb文件的路径,pwd是数据库文件的密码。密码绝对正确,但我一直收到“无效密码”的错误信息。 请有人指导我吗?-Sri。

附加信息: 我正在使用office 2010,并将此数据库保存为mdb(2003)文件(我还尝试使用accdb扩展名保存此文件)。 当我尝试为数据库设置密码时,它显示消息“使用块密码进行加密与行级锁定不兼容。将忽略行级锁定。” 这是否与VBA中的错误消息有关?


你确定你需要一个数据库密码而不是用户密码吗? - Fionnuala
4个回答

11
在Access 2010中,数据库密码的加密方法已更改,ADO提供程序的“Jet OLEDB:Database Password”关键字似乎无法与新方法配合使用。在这里,我不得不删除密码,进入Access->文件->选项->客户端设置->高级,并勾选“使用传统加密”,然后重新创建密码。
我不知道ACE提供程序是否有任何新的OLE DB连接字符串关键字,或者在使用ADO.NET时是否也会出现此问题。

同微软论坛:https://social.msdn.microsoft.com/Forums/en-US/13612ba0-f8cf-4c5d-b1db-96076e8ade70/error-while-connecting-access-2010-with-vba?forum=accessdev - Deduplicator
非常有用的答案。即使带密码的“.accdb”文件也无法使用,您需要一个“.mdb”文件(带/不带密码)。 - Sujoy

1
请按以下方式使用:
conStr =“Provider = Microsoft.ACE.OLEDB.16.0; Data Source = C:\ Users \ csub1 \ Desktop \ empdata.xlsx; Persist Security Info = False; Jet OLEDB:Database Password = pass@123; Extended Properties ='Excel 12.0; HDR = Yes;';Jet OLEDB:System database = C:\ Users \ csub1 \ AppData \ Roaming \ Microsoft \ Access \ System.mdw”
请找到 System.mdw 文件并在“系统数据库”下提供它。 在输入密码时,请使用 Jet OLEDB:Database Password。
经过大量研究,它起作用了。

0
我注册了stackoverflow只是为了感谢MNS CHANDRASEKARAN! 由于我刚注册,无法标记为答案并将其作为我的答案。 在很长时间的谷歌搜索失败后,我尝试了他的建议,它对我起作用了。 我没有包括连接字符串的扩展属性和系统数据库部分,但能够从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=\\yournetworkpath\yourfilename.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方法更容易。


被接受的答案并没有真正回答问题,因为它明确表示不知道如何做,并建议返回以前的Office版本。话虽如此,我的答案是为了确认和记录,对于那些仍然花费数小时寻找解决方案(就像我一样),真正正确的答案来自MNS CHANDRASEKARAN。我的分数不允许我标记或留下评论。 - yanez

0

或者你可以这样做。

    conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath & ";Jet OLEDB:Database Password=" & pwd

感谢您的快速回复。某种方法,这段代码在我的系统和另一个备用系统中都无法正常工作。 msgbox conn.ConnectionString 给出了“Provider = Microsoft.ACE.OLEDB.12.0; Data Source = C:\ Test.mdb; Jet OLEDB:Database Password = hello123;”,但仍会抛出 Invalid Password 错误。我正在使用 Office 2010,并将此数据库保存为 mdb(2003)文件。 - Developer
1
我可能错了,但是字符串应该像这样,"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Test.mdb;Jet OLEDB:Database Password=hello123"。 - user1452705
它取决于您使用的 OLEDB 版本以及您的数据库使用的扩展名。 - Oddacon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接