2016-11-30 59 views
0

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

当我尝试为我的同事做同样的工作时,最终出现: 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

不是您的问题的解决方案,但....您是否知道您可以直接从Oracle发送电子邮件(纯文本以及完整的HTML文档)? – FDavidov

回答

0

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

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

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

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

您应该检查它们全部,通常环境变量TNS_ADMIN具有最高优先级。

其实我不知道连接字符串是否区分大小写。尝试DBQ而不是Dbq

btw,你是否再次删除64位Oracle客户端?如果不是那么你的PATH变量可能仍然指向64位客户端,这将不适用于32位访问和32位ODBC驱动程序。

0

谢谢,Wernfried!你让我走向正确的方向!

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

的Oracle_Home - >文件夹的路径例如C:\ Oracle \ instantclient_12_1 TNS_ADMIN - > tnsnames.ora文件的路径例如C:\ Oracle \ instantclient_12_1 \ network(或者您保存它的任何地方!)

现在重新启动。

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