Excel 经典ADO/ODBC/Oracle 10g EZConnect的连接字符串语法
我正在尝试使用ADO(2.8)和无TNS将各种VBA项目连接到Oracle 10g后端。经过多次尝试后,我们决定清洁安装的最简单步骤包括: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
提前感谢你的帮助。我花了很长时间才开始使用,所以…试试这个,并根据需要替换值:
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”。