Access 2016 VBA连接远程Oracle数据库报错求助
解决Access 2016 VBA连接远程Oracle的错误问题
你遇到的这两个错误都是连接字符串格式不对或者驱动不匹配导致的,我帮你梳理下解决步骤和正确的代码写法:
先分析错误原因
- 运行时错误3706:这个错误说明系统找不到你指定的
OraOLEDB.Oracle提供者,大概率是Oracle OLEDB驱动没安装,或者驱动位数和Access 2016的位数不匹配(Access默认是32位,如果你装了64位Oracle驱动就会找不到)。 - 运行时错误-2147467259(80004005):这个是通用的连接失败错误,你的ODBC连接字符串里用
DSN=xxx的写法不对——DSN是指你预先在系统ODBC数据源里配置好的名称,不能直接写IP地址+端口+服务名。
解决步骤和正确代码
1. 先确认驱动匹配
打开Access 2016,点击「文件」→「账户」→「关于Access」,查看是32位还是64位。然后安装对应位数的Oracle客户端(或者单独的OLEDB/ODBC驱动),确保驱动正确注册。
2. 正确的OLEDB连接代码(推荐用这个,性能更好)
把你的连接字符串改成Oracle OLEDB标准格式,直接指定数据源描述,不用DSN:
Public Sub OpenConn() Dim adConn As ADODB.Connection Dim connStr As String Set adConn = New ADODB.Connection ' 替换成你的实际服务器信息、用户名和密码 connStr = "Provider=OraOLEDB.Oracle;" & _ "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=111.111.111.11)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)));" & _ "USER ID=xxxx;" & _ "PASSWORD=xxxx;" & _ "Persist Security Info=True" ' 加上错误处理,方便排查问题 On Error GoTo ConnError adConn.Open connStr MsgBox "Oracle数据库连接成功!" ' 这里可以添加后续操作,比如执行查询等 ' 用完记得关闭连接 adConn.Close Set adConn = Nothing Exit Sub ConnError: MsgBox "连接失败:" & Err.Description & vbCrLf & "错误代码:" & Err.Number Set adConn = Nothing End Sub
3. 正确的ODBC连接代码
如果你想用ODBC驱动,要把DSN改成SERVER,并且确保驱动名称和你安装的完全一致(比如Oracle in OraDb11g_home1):
Public Sub OpenConnODBC() Dim adConn As ADODB.Connection Dim connStr As String Set adConn = New ADODB.Connection ' 替换成你的实际信息 connStr = "Driver={Oracle in OraDb11g_home1};" & _ "SERVER=111.111.111.11:1521/orcl;" & _ "UID=xxxx;" & _ "PWD=xxxx;" & _ "Persist Security Info=True" On Error GoTo ConnError adConn.Open connStr MsgBox "Oracle数据库连接成功!" adConn.Close Set adConn = Nothing Exit Sub ConnError: MsgBox "连接失败:" & Err.Description & vbCrLf & "错误代码:" & Err.Number Set adConn = Nothing End Sub
额外检查点
- 确认远程Oracle服务器的端口号是否正确(你之前写过1111,默认是1521,要和服务器配置一致)
- 服务器的防火墙是否开放了对应端口,允许你的电脑访问
- 确认你的用户名和密码有远程连接Oracle的权限
- 如果还是报错,试着在本地用Oracle的
tnsping工具测试服务器连接,确认网络通不通
内容的提问来源于stack exchange,提问作者davidzxc574




