我正在尝试通过 VB6 访问 MDB 文件并接收:
Error 3031 - not a valid password
可能的原因是什么?我相信我发送了正确的文件密码,但它产生了此错误。
原因: 当您手动将数据库密码设置为包含 14 个字符(限制)的密码时,您无法使用相同的密码以编程方式打开数据库
解决方案:
1: 如果您需要以编程方式打开数据库,请勿选择超过 13 个字符的密码。
2: 当您以编程方式打开数据库时,只需包含数据库密码的前 13 个字符。
要使“重现问题的步骤”部分中的示例正常工作,请更改以下代码行
Set db = ws.OpenDatabase _
("C:\Program Files\Microsoft Office\Office\Samples\Northwind.mdb", _
False, False, "MS Access;PWD=FourteenCharac")
阅读如下:
Set db = ws.OpenDatabase _
("C:\Program Files\Microsoft Office\Office\Samples\Northwind.mdb", _
False, False, "MS Access;PWD=FourteenChara")
注意:即使密码不正确,这也会以编程方式打开
Northwind.mdb
数据库。
我也遇到这样的问题。上述解决方案没有帮助。 解决这样的问题:您需要打开一个可以访问加密数据库中任何表的记录集(在记录集中您可以指定数据库的路径和密码,它就会起作用)。创建记录集后,即使不指定密码也可以访问数据库:
Dim tmpR As DAO.Recordset
dim dbs As DAO.Database
If Pwd <> "" Then Set tmpR = CurrentDb.OpenRecordset("SELECT * FROM [" & ThePathToTheEncryptedDatabase & ";PWD=" & Pwd & "].[MSysQueries]", dbOpenSnapshot) 'I take the system table, because it is definitely in any database
'After the recordset is created, you can access dbs even without specifying a password:
Set dbs = DBEngine.OpenDatabase(ThePathToTheEncryptedDatabase)
'The temporary recordset is no longer needed
If Pwd <> "" Then tmpR.Close: Set tmpR = Nothing
重点是,如果我们已经从当前数据库至少建立了某种到加密数据库的连接,那么只要该连接持续,我们就可以创建一个数据库对象而无需指定密码。