Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用LDAP从excel VBA连接到Oracle数据库?_Excel_Vba_Oracle_Ldap - Fatal编程技术网

如何使用LDAP从excel VBA连接到Oracle数据库?

如何使用LDAP从excel VBA连接到Oracle数据库?,excel,vba,oracle,ldap,Excel,Vba,Oracle,Ldap,我们有几个excel电子表格使用ADODB连接连接到oracle数据库(见下面的示例代码)。连接是使用TNSNAMES进行的,TNSNAMES是使用oracle instaclient驱动程序在客户端计算机上设置的 Set oCN = CreateObject("ADODB.Connection") oCN.CursorLocation = 3 oCN.CommandTimeout = 0 cCN11 = "DRIVER=Oracle in instantclient11_1;" strDat

我们有几个excel电子表格使用ADODB连接连接到oracle数据库(见下面的示例代码)。连接是使用TNSNAMES进行的,TNSNAMES是使用oracle instaclient驱动程序在客户端计算机上设置的

Set oCN = CreateObject("ADODB.Connection")
oCN.CursorLocation = 3
oCN.CommandTimeout = 0

cCN11 = "DRIVER=Oracle in instantclient11_1;"
strDatabase = "DBQ=DATABASE_NAME;"
strID = "UID=YourID;"
strPassword = "PWD=YourPassword;"

oCN.Open cCN11 & strDatabase & strID & strPassword
这段代码运行良好。但是,已经决定不再维护TNSNAMES.ORA,而是使用LDAP。我试图找到一些关于如何使用LDAP通过VBA进行连接的信息,但找不到任何有用的信息

我不确定ADODB连接是否允许LDAP连接字符串,或者是否需要完全使用其他内容。如果有人能给我指出正确的方向,我将不胜感激

编辑

只是为了给我的设置提供更多的背景资料。32 oracle客户端安装在我们的网络驱动器上(z:\oracle11)。使用此功能的客户端计算机在注册表中具有以下驱动程序信息:

instantclient11\u 1中的HKEY\u LOCAL\u MACHINE\SOFTWARE\WOW6432Node\ODBC\ODBCINST.INI\Oracle

“HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ORACLE”将ORACLE_HOME和TNS_ADMIN设置为指向已安装的ORACLE客户端(z:\oracle11)。TNSNAMES.ORA位于安装文件夹(z:\oracle11)的根目录中

此设置已实施多年,通过TNSNAMES连接时运行良好

connection strings站点表示,如果要进行无TNSLESS连接,则连接字符串的格式应如下所示

SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort))(CONNECT_DATA=(SERVICE_NAME=MyOracleSID)));
uid=我的用户名;pwd=我的密码

根据注释和答案以及一些进一步的研究,使用下面的代码设置连接字符串应该是可行的。我必须在连接字符串中包含驱动程序

我已经使用当前的TNSNAMES.ORA数据构建了连接字符串(出于安全原因,主机、端口、服务名称、UID和PWD已经过编辑)

不幸的是,如果TNSNAMES文件中不存在“DBQ”,我会得到错误消息

[Oracle][ODBC][Ora][ORA-12154: TNS:could not resolve the connect identifier specified.
如果将DBQ更改为SERVER(如连接字符串示例中所示),则会收到不同的错误消息:

[Oracle][ODBC][Ora][ORA-12560: TNS:protocol adapter error.
我已经对“my_host”值进行了NSLOOKUP,它得到了解决,所以我知道这是正确的。端口号正确。服务名称也是正确的,用户名和密码也是正确的

我还尝试过使用“MicrosoftActiveX数据对象2.8”库和6.1版本,两者都没有任何区别

回答

为了澄清Wernfried Domscheit的答案,您只需更改“DBQ=DATABASE\u NAME”,这样DATABASE\u NAME值就是您的DNS值。非常感谢


很明显,我是想过度思考这个问题。我肯定我一定是先试过,但显然不是。干得好,我又试了一次,又读了一遍答案

数据库\u NAME
只是数据库的别名。无论是通过
tnsnames.ora
文件还是通过LDAP服务器解析此类别名,都没有任何区别


所以,没有区别。只需像对
tnsnames.ora
文件那样设置
TNS\u ADMIN
变量。

检查了吗?我查看了连接字符串,但没有特定于LDAP的内容。我将根据Wernfried Domscheit的答案再次查看这个问题。您是否参考了“Microsoft ActiveX数据对象x.x库”?是的,我在库的参考中设置了2.8。
[Oracle][ODBC][Ora][ORA-12560: TNS:protocol adapter error.