在 Access 中通过 oracle 进行直通查询时出现问题

问题描述 投票:0回答:2

我在使用 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 时成功使用了这个连接字符串;然而,在这种情况下它失败了。

vba ms-access database-connection connection-string pass-through
2个回答
1
投票

在 DAO 中,使用 ODBC 连接时,应在其前面加上

ODBC;

相应地调整您的代码:

 c = "ODBC;Driver={Oracle in OraClient12102_64};dbq=<<location>>;PUID=<<myuid>>;PWD=<<mypwd>>;"

0
投票

我做了一些研究,发现这个问题的解决方案是不使用上面提到的连接字符串。解决方案是让连接字符串引用文件 DSN,但文件 DSN 需要引用回系统 DSN 或用户 DSN 选项卡中的条目。创建一个带有 DSN 扩展名的文件,如下例所示:

  1. 选择一个路径并创建一个带有.DSN的文本文件,例如SAMP_FILE.DSN。
  2. 在某个文本编辑器中打开并输入以下格式:
[ODBC]
DSN=<<existing system or user DSN>>
UID=<<userid>>
PWD=<<password>>
  1. 保存并关闭。
  2. 在 VBA 代码中举例:
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

效果非常好

© www.soinside.com 2019 - 2024. All rights reserved.