【问题标题】:Connection string syntax for Classic ADO / ODBC / Oracle 10g EZConnectClassic ADO / ODBC / Oracle 10g EZConnect 的连接字符串语法
【发布时间】:2011-03-24 19:39:55
【问题描述】:

我正在尝试使用 ADO (2.8) 而没有 TNS 将各种 VBA 项目连接到 Oracle 10g 后端。经过各种尝试,我们决定干净安装的最简单的一系列步骤包括:

  1. 设置 Oracle Instant Client
  2. 安装随附的 ODBC 驱动程序
  3. (通过 SQL Plus 使用 EZCONNECT 测试连接)
  4. (通过创建 Windows DSN 测试连接)

到目前为止一切正常。问题是,我无法弄清楚告诉 ADO 使用 instant client ODBC 驱动程序的语法,该驱动程序在我的 ODBC 驱动程序列表中显示为“Oracle in MyTest”(无引号)。使用带有 EZConnect 的 MSFT ODBC 驱动程序作为this post 建议不会比设置即时客户端之前更好(也就是说,根本没有)。但this post 似乎暗示这是可能的,但没有具体说明如何,connectionstrings.com 只告诉你字符串的数据源部分是什么样的,即 SomeUser/SomePassword@AServer:PortNumber/InstanceName

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

提前感谢您的帮助。我花了很长时间才开始使用 SO...

【问题讨论】:

  • 这篇文章forums.oracle.com/forums/… 似乎解释了为什么 MSFT 的 ODBC 驱动程序不喜欢 ORCL 即时客户端——它提供不支持 ODBC 的 dll,但不包括它们的依赖项。不幸的是,即使我将它们复制到 IC 文件夹中,我也无法让 MSFT 的驱动程序看到这些依赖项。
  • 在工作中(我现在在家,我的时区是 CET),我们一直这样做。有(现有的)Access DB,有时当添加新的 Oracle DB 时,我基本上会在控制中心添加一个 ODBC 连接(就像这里描述的 support.microsoft.com/kb/303968),然后我去复制 Access DB 中的 passthru 对象,然后在这个无限长的字符串中更改数据库名称。我猜你正在寻找这个长字符串。好吧,如果明天您的问题仍未得到解答,我可能需要粘贴该字符串,这可能会有所帮助。
  • 感谢您的帮助,但我实际上希望以“最本机”的语法直接连接到 Oracle 服务器,这要么是 EZ Connect,要么是一种像这样的连接字符串嵌入式 TNS文章描述了使用codeproject.com/KB/vbscript/connection_string.aspx,但正如我在第一条评论中所描述的那样失败了。
  • 我们的想法是让应用程序的 Oracle 和配置占用空间尽可能小。当然,必须安装应用程序文件,但客户端应该很轻(在 Oracleland 中这可不是什么壮举,我正在学习——即使是“即时”客户端 +“即时”ODBC 驱动程序也几乎达到 100MB)和所有指向服务器、实例和登录名必须位于应用程序文件中。没有 TNS,没有 DSN(比如说快 10 倍!)等。如果可能的话。

标签: excel vba oracle ms-access ado


【解决方案1】:

类似于“user1206604”的回答 - 我使用 ODBC 数据源管理器设置了一个 ODBC 连接(例如,我们将其命名为“DEMO”)并像这样连接:

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

在开始菜单 > 程序 > Oracle - oraClient10g > 配置和迁移工具 > Microsoft ODBC 管理员中找到(在我的机器上)ODBC 数据源管理员,如下所示:

【讨论】:

  • 这救了我的命。谢谢!只需声明“Dim connStr, yourQueryString As String”并将“api.MoveNext”添加到循环中。
【解决方案2】:

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

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 的值(可能附加了版本号)。

如果这仍然不适合您。发表评论并详细说明发生的事情,我会尝试为您调整答案。

【讨论】:

    【解决方案3】:
    ' 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-06
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 2013-06-23
      相关资源
      最近更新 更多