我在使用 Oracle 作为数据库的以下代码中进行 Access 直通查询时遇到问题:
Sub doit()
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim rs As DAO.Recordset
Set db = CurrentDb
Set qdf = db.CreateQueryDef("")
c = "Driver={Oracle in OraClient12102_64};dbq=<<location>>;PUID=<<myuid>>;PWD=<<mypwd>>;"
qdf.Connect = c
qdf.SQL = "SELECT * FROM SYS.DUAL"
qdf.ReturnsRecords = True
Set rs = qdf.openRecordSet
End Sub
我收到的错误消息是
Invalid connection string in pass-through query
。
我在使用 ADODB.connection 时成功使用了这个连接字符串;然而,在这种情况下它失败了。
在 DAO 中,使用 ODBC 连接时,应在其前面加上
ODBC;
相应地调整您的代码:
c = "ODBC;Driver={Oracle in OraClient12102_64};dbq=<<location>>;PUID=<<myuid>>;PWD=<<mypwd>>;"
我做了一些研究,发现这个问题的解决方案是不使用上面提到的连接字符串。解决方案是让连接字符串引用文件 DSN,但文件 DSN 需要引用回系统 DSN 或用户 DSN 选项卡中的条目。创建一个带有 DSN 扩展名的文件,如下例所示:
[ODBC]
DSN=<<existing system or user DSN>>
UID=<<userid>>
PWD=<<password>>
Sub doit()
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim rs As DAO.Recordset
Set dc = CreateObject("adodb.connection")
Set db = CurrentDb
Set qdf = db.CreateQueryDef("")
qdf.Connect = "ODBC;"File Name=<<fulle path to SAMP_FILE.DSN as mentioned above>>;"
qdf.ODBCTimeout = 15520
qdf.SQL = "SELECT EXAMPLE_COL FROM EXAMPLE_TABLE where rownum<100"
qdf.ReturnsRecords = True
Set rs = qdf.openRecordSet
While Not rs.EOF
Debug.Print rs.Fields("EXAMPLE_COL").Value
rs.MoveNext
Wend
End Sub
效果非常好