如何用DAO为VB6程序中的Access数据库添加或移除密码?
如何通过DAO为Access数据库程序化添加/移除密码
针对VB6+DAO场景下无法为无密码Access库添加密码、或移除已有密码的问题,核心解决要点是正确使用空字符串("")而非vbNullString作为参数,同时必须以独占方式打开数据库。以下是具体实现方法:
添加密码到无密码数据库
需先以独占、无密码方式打开数据库,再调用NewPassword方法,旧密码参数传入空字符串:
Dim db As DAO.Database On Error GoTo ErrorHandler ' 独占模式打开无密码数据库,最后一个参数为空字符串表示无密码 Set db = OpenDatabase("C:\Path\To\YourDatabase.mdb", True, False, "") ' 执行添加密码操作:旧密码为空字符串,新密码为目标密码 db.NewPassword "", "YourNewPasswordHere" MsgBox "密码添加成功" ExitHandler: If Not db Is Nothing Then db.Close Set db = Nothing End If Exit Sub ErrorHandler: MsgBox "添加密码失败:" & Err.Description & " (错误码:" & Err.Number & ")" Resume ExitHandler
移除已有数据库的密码
需先以独占、带密码方式打开数据库,再调用NewPassword方法,新密码参数传入空字符串:
Dim db As DAO.Database On Error GoTo ErrorHandler ' 独占模式打开带密码的数据库,通过连接字符串指定密码 Set db = OpenDatabase("C:\Path\To\YourDatabase.mdb", True, False, ";PWD=YourExistingPassword") ' 执行移除密码操作:旧密码为当前密码,新密码为空字符串 db.NewPassword "YourExistingPassword", "" MsgBox "密码移除成功" ExitHandler: If Not db Is Nothing Then db.Close Set db = Nothing End If Exit Sub ErrorHandler: MsgBox "移除密码失败:" & Err.Description & " (错误码:" & Err.Number & ")" Resume ExitHandler
关键说明
- 参数区分:Jet DAO引擎仅接受
""(空字符串)作为合法的空密码参数,vbNullString会被识别为无效输入,从而触发3031错误。MSDN文档中提到的“空字符串”指的是""而非vbNullString。 - 独占打开要求:修改数据库密码必须以独占模式打开(
OpenDatabase的第二个参数Exclusive设为True),否则会因权限不足导致操作失败。 - 单用户场景验证:确保操作时数据库未被其他进程或应用占用,否则独占打开会失败。
内容的提问来源于stack exchange,提问作者Mark Moulding
相关产品推荐
相关产品推荐

