我正在尝试通过VBA打开Excel和Access数据库之间的连接:
Sub get_column_real()
Dim cn As Object
Dim rs As Object
Dim strSql As String
Dim strConnection As String
Dim i As Long
Dim fld As Object
Set cn = CreateObject("ADODB.Connection")
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=O:\MAP\05_Reporting\2018_MAPDB_NewServer.accdb;" & _
"User Id=admin;Jet OLEDB:Database Password=123456" & _
"Jet OLEDB:System Database=C:\Users\M299700\AppData\Roaming\Microsoft\Access\System.mdw"
' cn.Properties("Jet OLEDB:System database") = _
' "C:\Users\M299700\AppData\Roaming\Microsoft\Access\System.mdw"
strSql = "SELECT dbo_TaskList.Id, dbo_TaskList.UserName FROM dbo_TaskList;"
cn.Open strConnection
Set rs = cn.Execute(strSql)
End sub
我得到:
运行时错误'-2147217887(80040e21)':多步OLE DB操作生成了错误。检查每个OLE DB状态值(如果有)。没有工作
第cn.Open strConnection
行。
根据此页面:http://www.adopenstatic.com/faq/80040e21.asp,我可能有一些不受支持的属性。我不确定那可能是哪一个。例如,我只尝试了Password
而不是Jet OLEDB:Database Password
,但是随后出现Not a valid account name or password
错误。
如何修复连接?
答案 0 :(得分:0)
考虑到评论,您根本没有加密的数据库,因此不应该提供密码:
Sub get_column_real()
Dim cn As Object
Dim rs As Object
Dim strSql As String
Dim strConnection As String
Dim i As Long
Dim fld As Object
Set cn = CreateObject("ADODB.Connection")
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=O:\MAP\05_Reporting\2018_MAPDB_NewServer.accdb;" & _
"User Id=admin;Jet OLEDB:Database Password="""";" & _
"Jet OLEDB:System Database=C:\Users\M299700\AppData\Roaming\Microsoft\Access\System.mdw"
' cn.Properties("Jet OLEDB:System database") = _
' "C:\Users\M299700\AppData\Roaming\Microsoft\Access\System.mdw"
strSql = "SELECT dbo_TaskList.Id, dbo_TaskList.UserName FROM dbo_TaskList;"
cn.Open strConnection
Set rs = cn.Execute(strSql)
End sub
但是,不支持通过OLEDB连接查询链接表,因此无法使用。您应该直接查询链接表。
我强烈建议您省略系统数据库,因为此路径对其他用户无效,而且不适用于accdb文件。
作为参考,您可以使用Debug.Print CurrentProject.Connection.ConnectionString
获取Access正在使用的当前连接字符串。