尝试使用Excel VBA连接到64位Oracle Database 12c企业版。
客户端计算机已安装以下32位驱动程序:
并安装了以下64位驱动程序:
该文件具有以下参考:
我尝试了多种格式的连接字符串,但无济于事。
'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;"
我还尝试在连接字符串中使用以下驱动程序
答案 0 :(得分:0)
我认为安装一个以上版本的Oracle Client是一个坏主意,即一个32位和一个64位。
对于OLE DB(即“ OraOLEDB.Oracle”),由于基于COM的限制,甚至不可能有多个版本(除非您每次都要注册DLL运行应用程序的时间)。
通常,您可以使用ODBC或OLE DB,两者都可以使用。
最重要的一点是:Excel的体系结构(即32位或64位)必须与Oracle驱动程序的体系结构相同!数据库的体系结构无关紧要。
ODBC和OLE DB驱动程序由Microsoft(“ Oracle的Microsoft ODBC”和“ MSDAO”)和Oracle(例如“ OraClient12Home1中的Oracle”和“ OraOLEDB.Oracle”)提供。
Microsoft驱动程序已旧且已弃用,您应该首选Oracle的驱动程序。 Microsoft驱动程序仅适用于32位,因此,如果您的Excel是64位,则您甚至被迫使用Oracle驱动程序。
另一个说明,Oracle驱动程序(ODBC和OLE DB)的版本必须与Oracle客户端的版本相同,很可能在安装三个不同的Oracle客户端时将其弄乱了。
如果需要安装32位和64位客户端,请遵循以下说明:BadImageFormatException. This will occur when running in 64 bit mode with the 32 bit Oracle client components installed
答案 1 :(得分:0)
感谢大家的帮助,对于延迟的回复(我扑灭了多次与工作有关的“火灾”)表示抱歉。
无论如何...我找到了对我有用的解决方案。我不认为问题出在同一台计算机上,因为我现在可以进行连接,而无需更改任何设置,除了我使用的连接字符串方法。
尽管我仍然不确定为什么我的连接字符串的“驱动程序”方法不起作用,但是我仍然能够使用基于“提供商”的连接字符串,并且有效。
'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;"