0

在工作中,我在 access vba 中编写了一些东西来自动创建邮件并将它们发送出去。为了获得所有需要的信息,我需要访问我公司的服务器。C:\Oracle\instantclient_12_1一切都对我有用:对 vba 进行编程,在(均为 32 位)中安装了oracle 即时客户端 12_1 和 odbc 部分,在同一目录中安装odbc_install.exe并创建了-file。tnsnames.ora

当我尝试为我的同事做同样的事情时,最终会 Run-time Error '-2147467259 (80004005) [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified 出现:

我完全不知道为什么。尝试安装 64 位驱动程序,显然无法工作:P 尝试更改 vba 中的连接字符串和 tnsnames.ora 文件...

我还没有创建一个 user-dsn 连接,我真的很想避免这样做,而且不是真的有必要。

你知道可能是什么问题或我该如何解决这个问题吗?

.

.

这是我在 vba 中使用的连接字符串:

Set CMDB_cn = New ADODB.Connection Set CMDB_rst = New ADODB.Recordset Dim strConnect, str1 As String strConnect = "Driver={Oracle in instantclient_12_1};Dbq=blabla;Uid=user;Pwd=swordfish;" str1 = "select * From db.table WHERE Name = 'Mr. Nobody';" CMDB_cn.Open strConnect

和 tnsnames.ora:

blabla=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=123.456.789.123)(PORT=1234)))(CONNECT_DATA=(SID=serverName)(SERVER=DEDICATED)))
4

2 回答 2

1

tnsnames.ora“在同一目录中创建 -file”是什么意思

文件的位置tnsnames.ora可以通过几种方式确定:

  • 运行.exe文件所在的目录。(对于 MS-Access 程序文件夹很可能不是一个聪明的主意)
  • 您当前的工作目录
  • 环境变量指定的文件夹TNS_ADMIN
  • HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY_OraClient12_1_home1\TNS_ADMIN注册表值(或类似)中指定的文件夹
  • 文件夹%ORACLE_HOME%\network\admin,即C:\Oracle\instantclient_12_1\network\admin

我不知道所有这些条件是否都适用于 ODBC,我也不知道优先顺序,我从未找到任何相关文档。

您应该检查所有这些,通常环境变量TNS_ADMIN具有最高优先级。

其实我不知道 Connection-String 是否区分大小写。尝试DBQ代替Dbq

顺便说一句,您是否再次删除了 64 位 Oracle 客户端?如果不是,那么您的PATH变量可能仍指向 64 位客户端,该客户端不适用于 32 位 Access 和 32 位 ODBC 驱动程序。

于 2016-11-30T09:27:46.823 回答
0

谢谢,温弗里德!你让我找到了正确的方向!

我没有在其他计算机上创建环境变量:

Oracle_Home -> 文件夹路径,例如 C:\Oracle\instantclient_12_1 TNS_ADMIN -> tnsnames.ora 文件的路径,例如 C:\Oracle\instantclient_12_1\network(或保存在任何位置!)

现在重新启动。

代码中的连接(对我来说是 vba)现在将找到 tnsnames 文件并能够将连接字符串解析到数据库。

于 2016-11-30T10:16:49.060 回答