Access中使用DAO创建Oracle直通查询时连接字符串无效报错
解决Access DAO创建Oracle直通查询的连接字符串错误
问题核心原因
你遇到的Invalid connection string in pass-through query错误,根源是DAO的QueryDef连接字符串格式与ADODB存在差异,主要有两点关键区别:
- DAO要求ODBC连接字符串必须以
ODBC;前缀开头,ADODB无需该前缀; - DAO不支持ADODB中使用的
PUID扩展参数,需改用标准ODBC参数UID。
修正后的代码
Sub doit() Dim db As DAO.Database Dim qdf As DAO.QueryDef Dim rs As DAO.Recordset Set db = CurrentDb Set qdf = db.CreateQueryDef("") ' 修正连接字符串:添加ODBC前缀,替换PUID为标准UID参数 c = "ODBC;Driver={Oracle in OraClient12102_64};dbq=<<location>>;UID=<<myuid>>;PWD=<<mypwd>>;" qdf.Connect = c qdf.SQL = "SELECT * FROM SYS.DUAL" qdf.ReturnsRecords = True ' 修正方法名拼写(标准写法为OpenRecordset) Set rs = qdf.OpenRecordset ' 可选:验证查询结果 If Not rs.EOF Then Debug.Print rs(0).Value End If ' 资源清理 rs.Close Set rs = Nothing Set qdf = Nothing Set db = Nothing End Sub
修正点说明
- 添加
ODBC;前缀:DAO的QueryDef.Connect属性强制要求ODBC连接字符串以该前缀开头,否则会被判定为无效格式; - 替换
PUID为UID:PUID是Oracle驱动针对ADODB的扩展参数,DAO遵循标准ODBC规范,必须使用UID指定用户名; - 修正方法名拼写:原代码中
openRecordSet的写法不规范,标准VBA方法名为OpenRecordset(驼峰式),虽VBA不区分大小写,但规范写法可避免潜在语法问题。
内容的提问来源于stack exchange,提问作者Z T Minhas
相关产品推荐
相关产品推荐

