gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 20:28:29 25 4
gpt4 key购买 nike

我们有几个使用 ADODB 连接到 oracle 数据库的 excel 电子表格(参见下面的示例代码)。连接是使用 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_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=我的用户名;密码=我的密码;

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

我已经使用当前的 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 Data Objects 2.8”库和 6.1 版本,两者都没有任何区别。

回答

要澄清 Wernfried Domscheit 的答案,您只需更改“DBQ=DATABASE_NAME”,以便 DATABASE_NAME 值是您的 DNS 值。非常感谢温弗里德。

我显然是想多想这个。我确信我必须先尝试过,但显然不是。干得好,我又试了一次,并再次阅读了答案。

最佳答案

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

所以,没有区别。只需设置您的 TNS_ADMIN变量,就像对 tnsnames.ora 所做的那样文件。

关于excel - 如何使用 LDAP 从 excel VBA 连接到 Oracle 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54458560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com