excel - Excel 使用 VBA 连接到 Oracle 12c
问题描述
尝试使用 Excel VBA 连接到 64 位 Oracle Database 12c 企业版。
客户端计算机安装了以下 32 位驱动程序:
- 适用于 Oracle 的 Microsoft ODBC
- OraClient11g_home1 中的 Oracle
- OraClient12Home1_32bit中的Oracle
并安装了以下 64 位驱动程序:
- OraClient11g_home1 中的 Oracle
- OraClient12Home1 中的 Oracle
该文件有以下参考:
- Microsoft ActiveX 数据对象 6.1 库
我尝试了多种格式的连接字符串,但没有任何效果。
'This gave the error "[Oracle][ODBC][Ora]ORA-12560: TNS:protocol adapter error"
cs = "Driver={Oracle in OraClient12Home1}; UID=myuid; PWD=mypwd; SERVER=myhostname/myservicename;"
'This gave the error "[Oracle][ODBC][Ora]ORA-12154: TNS:could not resolve the connect identifier specified"
cs = "Driver={Oracle in OraClient12Home1}; UID=myuid; PWD=mypwd; SERVER=myhostname; DBQ=myservicename;"
'This gave the error "[Oracle][ODBC][Ora]ORA-12560: TNS:protocol adapter error"
cs = "Driver={Oracle in OraClient12Home1}; CONNECTSTRING=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myhostname)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=myservicename)));UID=myuid; PWD=mypwd;"
'This would crash Excel
cs = "Driver={Oracle in OraClient11g_home1}; CONNECTSTRING=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myhostname)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=myservicename)));UID=myuid; PWD=mypwd;"
我还尝试了在连接字符串中使用以下驱动程序的变体
- 适用于 Oracle 的 Microsoft ODBC
- OraOLEDB.Oracle
- OraClient12Home1 中的 Oracle
解决方案
感谢大家的帮助,并对延迟的响应表示抱歉(我正在扑灭多个与工作相关的“火灾”)。
无论如何......我找到了一个适合我的解决方案。我认为问题不在于同一台机器上有多个驱动程序,因为我现在能够连接而无需更改任何东西,除了我使用的连接字符串方法。
虽然我仍然不确定为什么我的连接字符串的“驱动程序”方法不起作用,但我能够使用基于“提供者”的连接字符串并且有效。
'Using OraOLEDB.Oracle.1.
cs = "Provider=OraOLEDB.Oracle.1;User ID=myuid;Password=mypwd;Data Source=myhostname/myservicename;"
'Using OraOLEDB.Oracle.
cs = "Provider=OraOLEDB.Oracle;User ID=myuid;Password=mypwd;Data Source=myhostname/myservicename;"
'Using OraOLEDB.Oracle as a TNS-less connection string.
cs = "Provider=OraOLEDB.Oracle;Data Source=(DESCRIPTION=(CID=GTU_APP)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=myhostname)(PORT=myport)))(CONNECT_DATA=(SERVICE_NAME=myservicename)(SERVER=DEDICATED)));User Id=myuid;Password=mypwd;"
'Using variation of the above with a port included.
cs = "Provider=OraOLEDB.Oracle.1;User ID=myuid;Password=mypwd;Data Source=myhostname:myport/myservicename;"
推荐阅读
- css - 菜单切换不适用于移动设备,但适用于桌面浏览器中的所有移动模拟器
- c# - 在 starup.cs 配置中访问 IHttpContextAccessor 会使我的应用程序崩溃
- javascript - 通过删除按钮删除 reactjs 中的多个 div
- ruby-on-rails - 如何在部分内部呈现表单(Rails Simple_form)?
- sql-server - 连接中的 SQL 案例/IF 语句?
- excel - 使用 excel vba 从保存在文件夹中的 .msg 文件中提取附件 - 子目录
- python - 将 8 位值转换为 24 位值
- javascript - arangojs:keepNull 不是 collection.save 的选项?
- c# - Powershell 实现 C# System.Diagnostics.Tracing.EventSource
- objective-c - 在 Objective-C(和 Swift)中,弱属性是线程安全的吗?