2016-11-30 77 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文件並能夠將連接字符串解析爲數據庫。