簡體   English   中英

Excel VBA使用InstantClient連接到遠程Oracle DB

[英]Excel VBA connect to remote Oracle DB with InstantClient


我正在嘗試使用Excel(主要是2003,以獲得更多用戶兼容性)來連接到遠程Oracle DB。 我想運行.sql腳本並將數據集返回到工作表。
我在Windows 7 64位機器上。 我不知道Oracle DB服務器的規格。
我想保持盡可能輕量級(在客戶端計算機上沒有額外的文件安裝,盡可能使用共享網絡位置來獲取所需文件)



至今:

我將來自Oracle的InstantClient(32位和64位版本12.1和11.2)下載並“安裝”到遠程網絡位置。
我嘗試使用SQL Plus連接到Oracle數據庫並且工作正常(我嘗試了幾個已安裝的InstantClient版本以查看是否存在任何兼容性問題)。
作為測試:在VBA中使用SQL Plus和Shell函數,我能夠成功將數據假脫機到一個單獨的excel文件中。


我使用各種驅動程序/提供程序嘗試了幾種不同的連接字符

  • Driver = {Oracle in instantclient_11_2}
  • Driver = {Microsoft ODBC for Oracle}
  • 供應商= MSDAORA
  • 供應商= MSDAORA.1
  • 供應商= OraOLEDB.Oracle

我收到的錯誤:

"Run-time error '-2147467259 (80004005)':
[Microsoft][ODBC Driver Manager] Driver's SQLAllocHandle on SQL_HANDLE_ENV failed
The Oracle(tm) client and networking components were not found. These components are supplied by Oracle Corporation..."


"Run-time error '-2147467259 (80004005)':
[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified"


"Run-time error '3706':
Provider cannot be found. It may not be properly installed"

還有一些其他類似的錯誤。



我已將包含instantclient文件的網絡位置添加到我的PATH環境變量中。 不確定我需要的其他環境變量,或者即使我當前的變量是正確的。

我需要:
TNS_ADMIN? ORACLE_HOME?



題:

  • 如何使用位於網絡(共享)位置instantclient文件使用VBA連接到遠程Oracle DB

    • 什么是正確的完整連接字符串? (我在SQLPlus中使用了EZConnect格式;實際的連接細節是否相同?為了澄清,有人可以發布一個EZConnect格式如何轉換為其他格式的示例嗎?)

       My EZConnect Format: username/password@myserver.some.thing.com/mydb 
    • 應該為此目的使用什么“提供者”或“驅動程序”,是否存在重大差異?

    • 需要哪些環境變量來完成這項工作?

我發現了許多類似或相關的問題,但沒有一個直接回答我的問題或幫助我完全解決它。

結束編輯/使用此功能(不使用(?)使用驅動程序/提供程序: InstantClient但仍使用這些文件):

Function ORAQUERY(strHost As String, strDatabase As String, strSQL As String, strUser As String, strPassword As String)
  Dim strConOracle, oConOracle, oRsOracle
  Dim StrResult As String
  StrResult = ""
  strConOracle = "Driver={Microsoft ODBC for Oracle}; " & _
         "CONNECTSTRING=(DESCRIPTION=" & _
         "(ADDRESS=(PROTOCOL=TCP)" & _
         "(HOST=" & strHost & ")(PORT=1521))" & _
         "(CONNECT_DATA=(SERVICE_NAME=" & strDatabase & "))); uid=" & strUser & " ;pwd=" & strPassword & ";"
  Set oConOracle = CreateObject("ADODB.Connection")
  Set oRsOracle = CreateObject("ADODB.Recordset")
  oConOracle.Open strConOracle
  Set oRsOracle = oConOracle.Execute(strSQL)
  MsgBox (oRsOracle.Fields(0).Value)
  varResult = oRsOracle.GetRows
  Do While Not oRsOracle.EOF
      If StrResult <> "" Then
        StrResult = StrResult & Chr(10) & oRsOracle.Fields(0).Value
      Else
        StrResult = oRsOracle.Fields(0).Value
      End If
    oRsOracle.MoveNext
  Loop
  oConOracle.Close
  Set oRsOracle = Nothing
  Set oConOracle = Nothing
  ORAQUERY = StrResult
End Function



正確的完整連接字符串:

Driver={Microsoft ODBC for Oracle}; CONNECTSTRING=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=strHost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=strDatabase))); uid=strUser; pwd=strPassword;

提供者或司機:
{Microsoft ODBC for Oracle}

需要將PATH環境變量設置為指向instantclient。
沒有使用任何其他環境變量,例如ORACLE_HOME,TNS_ADMIN等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM