Excel 经典ADO/ODBC/Oracle 10g EZConnect的连接字符串语法

Excel 经典ADO/ODBC/Oracle 10g EZConnect的连接字符串语法,excel,vba,oracle,ms-access,ado,Excel,Vba,Oracle,Ms Access,Ado,我正在尝试使用ADO(2.8)和无TNS将各种VBA项目连接到Oracle 10g后端。经过多次尝试后,我们决定清洁安装的最简单步骤包括: 设置Oracle即时客户端 安装附带的ODBC驱动程序 (通过SQL Plus使用EZCONNECT测试连接) (通过创建Windows DSN测试连接) 这里的一切都很好。问题是,我无法理解告诉ADO使用即时客户端ODBC驱动程序的语法,该驱动程序在我的ODBC驱动程序列表中显示为“Oracle in MyTest”(无引号)。按照建议将MSFT ODBC

我正在尝试使用ADO(2.8)和无TNS将各种VBA项目连接到Oracle 10g后端。经过多次尝试后,我们决定清洁安装的最简单步骤包括:

  • 设置Oracle即时客户端
  • 安装附带的ODBC驱动程序
  • (通过SQL Plus使用EZCONNECT测试连接)
  • (通过创建Windows DSN测试连接)
  • 这里的一切都很好。问题是,我无法理解告诉ADO使用即时客户端ODBC驱动程序的语法,该驱动程序在我的ODBC驱动程序列表中显示为“Oracle in MyTest”(无引号)。按照建议将MSFT ODBC驱动程序与EZConnect一起使用不会比在设置即时客户端之前更好(也就是说,根本不会)。但似乎表明这是可能的,没有具体说明如何实现,只告诉您字符串的数据源部分是什么样子,即。 某个用户/SomePassword@AServer:PortNumber/InstanceName

    简短版本:引用即时客户端ODBC驱动程序的经典ADO连接字符串的确切语法是什么


    提前感谢你的帮助。我花了很长时间才开始使用,所以…

    试试这个,并根据需要替换值:

    Set Connection = CreateObject("ADODB.Connection")
    
    blnTest = Connection.Open("Driver={Oracle in instantclient};Dbq=127.0.0.1:1521/SERVICENAMEHERE", "USERNAME", "PASSWORD")
    
    如果instantclient中的Oracle不工作,请检查HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers注册表项,以查看Oracle Instant Client的值(可能附加了版本号)


    如果这对你仍然不起作用。请留下一条注释,详细说明发生了什么,我将尝试为您调整答案。

    类似于“user1206604的答案-我使用ODBC数据源管理员设置了ODBC连接(例如,为了方便起见,我们将其命名为“DEMO”),并按如下方式连接:

    ' Create a connection object.'
    Dim cn As ADODB.Connection
    Set cn = New ADODB.Connection
    
    ' Create a recordset object.'
    Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset
    
    ' Provide the connection string.'
    Dim strConn As String
    Dim str As String
    
    'Use the SQL Server OLE DB Provider.'
    strConn = "Driver=(Oracle in OraHome92);" & "Data Source=;Uid=;Pwd=;"
    
    'Now open the connection.'
    cn.Open strConn
    With rs
    
        ' Assign the Connection object.'
        ActiveConnection = cn
    
        ' Extract the required records.'
        .Open "SELECT ", cn
    
    
    End With
    
    Dim conn As New adodb.Connection
    Set conn = New adodb.Connection
    
    connStr = "Provider=OraOLEDB.Oracle;Data Source=DEMO;User Id=yourUserID;Password=yourPassword;"
    conn.Open connStr
    
    Dim api As New adodb.Recordset
    Set api = New adodb.Recordset
    
    yourQueryString = "SELECT foo FROM bar"
    api.Open yourQueryString, conn, adOpenDynamic, adLockReadOnly 
    'adjust above setting as needed
    
    while not api.EOF
      'do interesting stuff here
    wend
    
    'clean up resources
    api.Close
    Set api = Nothing
    
    conn.Close
    Set conn = Nothing
    
    ODBC数据源管理员位于“开始”菜单>程序>Oracle-oraClient10g>配置和迁移工具>Microsoft ODBC管理员中(在我的机器上),如下所示:

    Dim conn As New adodb.Connection
    Set conn = New adodb.Connection
    
    connStr = "Provider=OraOLEDB.Oracle;Data Source=DEMO;User Id=yourUserID;Password=yourPassword;"
    conn.Open connStr
    
    Dim api As New adodb.Recordset
    Set api = New adodb.Recordset
    
    yourQueryString = "SELECT foo FROM bar"
    api.Open yourQueryString, conn, adOpenDynamic, adLockReadOnly 
    'adjust above setting as needed
    
    while not api.EOF
      'do interesting stuff here
    wend
    
    'clean up resources
    api.Close
    Set api = Nothing
    
    conn.Close
    Set conn = Nothing
    

    这篇文章似乎解释了为什么MSFT的ODBC驱动程序不喜欢ORCL即时客户端——它提供了不支持ODBC的DLL,但没有包含它们的依赖项。不幸的是,即使我将它们复制到IC文件夹中,我也无法让MSFT的驱动程序看到这些依赖项。在工作中(我现在在家,我的时区是CET),我们总是这样做。有(一个现有的)Access DB,有时,当添加一个新的Oracle DB时,我基本上会在control center中添加一个ODBC连接(如本文所述),接下来,我会复制Access DB中的passthru对象,并更改这个无限长字符串中的DB名称。我猜你在找这根长绳子。如果你的问题明天仍然没有得到回答,我可能需要粘贴该字符串,这可能会有所帮助。谢谢你的帮助,但我实际上希望以“最原生”的语法直接连接到Oracle服务器,它可以是EZ Connect,也可以是一种嵌入TNS的连接字符串,如本文所述,但正如我在第一篇评论中所描述的那样,它失败了。其想法是让应用程序的Oracle和配置占用空间尽可能小。当然,必须安装应用程序文件,但客户端应该很轻(我正在学习的是,在Oracleland中这并不意味着了不起——即使是“即时”客户端+即时”ODBC驱动程序达到了近100MB),所有指向服务器、实例和登录的指针都必须位于应用程序文件中。没有TNS,没有DSN(说10倍快!),等等。如果可能的话。你试试看?这救了我的命。非常感谢。只需声明“Dim connStr,yourQueryString为String”,并在循环中添加“api.MoveNext”。