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

时间:2019-01-31 10:33:23

标签: excel vba oracle ldap

我们有几个Excel电子表格使用ADODB连接连接到oracle数据库(请参见下面的示例代码)。使用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连接字符串,或者我是否需要完全使用其他内容。如果有人能指出我正确的方向,将不胜感激。

编辑

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

instantclient11_1中的HKEY_LOCAL_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连接时可以正常工作。

连接字符串站点说,如果要进行TNSLESS连接,则连接字符串的格式应为以下格式

SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort))(CONNECT_DATA=(SERVICE_NAME=MyOracleSID)));

uid = myUsername; pwd = myPassword;

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

我已使用当前的TNSNAMES建立了连接字符串。ORA数据(出于安全原因已删除了HOST,PORT,SERVICE_NAME,UID和PWD)

Dim sSQL As String
Dim oRS As ADODB.Recordset  'ADODB.Recordset
Dim oCN As ADODB.Connection

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


' Build the connection string
strConnectionString = "DRIVER=Oracle in instantclient11_1;DBQ=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=my_ host)(PORT=1234)))(CONNECT_DATA=(SERVICE_NAME=myhost.world)(SERVER=DEDICATED)));Pwd=my_password;Uid=my_user_id"

' Open the connection using the connection string
oCN.Open strConnectionString

不幸的是,如果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并得到解决,所以我知道这是正确的。端口号正确。服务名称也正确,用户名和密码也正确。

我也尝试过使用“ Microsoft ActiveX数据对象2.8”库和6.1版本,两者都不起作用。

答案

要弄清楚Wernfried Domscheit的答案,您只需更改“ DBQ = DATABASE_NAME”,以便DATABASE_NAME值为您的DNS值。非常感谢Wernfried。

我显然想过分考虑。我确信我一定先尝试过,但显然没有。干得好,我再次尝试,然后再次阅读答案。

1 个答案:

答案 0 :(得分:1)

DATABASE_NAME只是数据库的别名。通过tnsnames.ora文件或LDAP服务器解析此类别名没有任何区别。

因此,没有区别。只需像处理TNS_ADMIN文件那样设置tnsnames.ora变量即可。