Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在excelvba和Access中使用DAO停止密码提示_Excel_Vba_Ms Access_Dao - Fatal编程技术网

如何在excelvba和Access中使用DAO停止密码提示

如何在excelvba和Access中使用DAO停止密码提示,excel,vba,ms-access,dao,Excel,Vba,Ms Access,Dao,我正在使用DAO在Excel中使用vba在密码保护的Access数据库上运行查询,有时在运行sub时,Access实例会打开一个窗口,询问数据库密码,不输入密码,按“取消”键没有任何区别,查询仍会运行并显示输出,有没有办法阻止访问打开并询问密码 Dim MyDatabase As DAO.Database Dim MyQueryDef As DAO.QueryDef Dim MyRecordset As DAO.Recordset Dim DB_Name As String Dim cond A

我正在使用DAO在Excel中使用vba在密码保护的Access数据库上运行查询,有时在运行sub时,Access实例会打开一个窗口,询问数据库密码,不输入密码,按“取消”键没有任何区别,查询仍会运行并显示输出,有没有办法阻止访问打开并询问密码

Dim MyDatabase As DAO.Database
Dim MyQueryDef As DAO.QueryDef
Dim MyRecordset As DAO.Recordset
Dim DB_Name As String
Dim cond As String
Dim pWord As String

Dim wb As Workbook: Set wb = ThisWorkbook
With wb

    On Error GoTo ErrHandler:

    clearRange.Value = ""

    DB_Name = DataBname()
    pWord = pwd()

    Set MyDatabase = DBEngine.Workspaces(0).OpenDatabase(DB_Name, False, True, pWord)
    Set MyQueryDef = MyDatabase.QueryDefs(queryName) 'Query Name

    Set MyRecordset = MyQueryDef.OpenRecordset 'Open the query
    pasteRange.CopyFromRecordset MyRecordset

    failRange.Value = False

My_Exit:

    If MyRecordset Is Nothing Then
        'Do Nothing
    Else
        MyRecordset.Close
        Set MyRecordset = Nothing
    End If
    If MyDatabase Is Nothing Then
        'Do Nothing
    Else
        MyDatabase.Close
        Set MyDatabase = Nothing
    End If

End With

Exit Sub

ErrHandler:

MsgBox Err.Description
failRange.Value = True
Resume My_Exit

End Sub

Function pwd() As String

pwd = "MS Access;PWD=password"

End Function

您的代码中没有任何错误。 使用Access 2003后端进行测试。 如果使用Access 2007及更高版本,则必须在DB选项中设置对旧版密码的处理


致以最诚挚的问候

要解决此问题,您必须将工作簿中的引用从
DAO.36
更改为Microsoft Office XX.0 Access数据库引擎对象库

我已经用
access2010
access2013
对代码进行了测试,效果很好


致以最诚挚的问候

已将密码选项更改为legacy并重新加密,我还尝试创建一个新数据库,导入表和查询并使用legacy进行加密,但仍然不起作用。另一个答案修复了问题,但我也相信我会遇到您在此处给出答案的问题,谢谢你。