错误 3031 - 密码无效

问题描述 投票:0回答:2

我正在尝试通过 VB6 访问 MDB 文件并接收:

Error 3031 - not a valid password

可能的原因是什么?我相信我发送了正确的文件密码,但它产生了此错误。

ms-access vb6
2个回答
2
投票

原因: 当您手动将数据库密码设置为包含 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
数据库。


0
投票

我也遇到这样的问题。上述解决方案没有帮助。 解决这样的问题:您需要打开一个可以访问加密数据库中任何表的记录集(在记录集中您可以指定数据库的路径和密码,它就会起作用)。创建记录集后,即使不指定密码也可以访问数据库:

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

重点是,如果我们已经从当前数据库至少建立了某种到加密数据库的连接,那么只要该连接持续,我们就可以创建一个数据库对象而无需指定密码。

© www.soinside.com 2019 - 2024. All rights reserved.