在工作中,我在access vba中编写了一些内容来自动创建邮件并将其发送出去。要获得所需的所有信息,我需要访问我公司的服务器。
一切都适合我:编程vba,在C:\Oracle\instantclient_12_1
(均为32位)安装了oracle即时客户端12_1和odbc部分,安装了odbc_install.exe
并在同一个文件中创建了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文件中的连接字符串......
我还没有创建用户-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)))
答案 0 :(得分:0)
“在同一目录中创建tnsnames.ora
- 文件”是什么意思“
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
PATH
变量仍可能指向64位客户端,该客户端不能与32位Access和32位ODBC驱动程序一起使用。
答案 1 :(得分:0)
谢谢,Wernfried!你让我走向正确的方向!
我没有在其他计算机上创建环境变量:
Oracle_Home - >文件夹的路径,例如C:\ ORACLE \ instantclient_12_1 TNS_ADMIN - > tnsnames.ora文件的路径,例如C:\ Oracle \ instantclient_12_1 \ network(或者保存它的任何地方!)
现在重启。
代码中的连接(对我来说是vba)现在将找到tnsnames文件,并能够解析数据库的连接字符串。