VBA - ADODB 连接到远程 Oracle 数据库

VBA - ADODB connect to remote Oracle db

我正在开发一个 Excel VBA 程序,我想连接到远程 Oracle 11g 数据库,运行 一个查询,return 数据到 Excel.

据我所知,连接字符串和驱动程序都没有问题。 (见下文)

昨天它在一段时间内运行良好,连接到数据库并 return 使用正确的数据。然后我保存并关闭工作簿,20 分钟后打开它(没有做任何更改!)当我 运行 宏时,我收到以下错误:

Runtime error '-2147418113 (8000ffff)': Catastrophic failure

知道是什么导致了错误吗? 它可能是数据库方面的东西吗?

谢谢

Sub ExtractFromOracle(environment As String)

Dim cn As ADODB.connection
Dim recordSet As ADODB.recordSet
Set cn = CreateObject("ADODB.Connection")
Set recordSet = CreateObject("ADODB.recordset")

Dim SQLQuery As String
SQLQuery = "SELECT User_Id, Prof_Id FROM user_profile ORDER BY User_Id ASC"

Dim returnData As Variant
Dim returnedRowsCount As Integer

Dim connectionString As String
connectionString = ReturnConnectionString(environment)


cn.Open (connectionString) ------------> ERROR OCCURS HERE


Set recordSet = cn.Execute(SQLQuery)
returnData = Application.Transpose(recordSet.GetRows)
returnedRowsCount = UBound(returnData)

If Not SheetExist(environment) Then
CreateTab (environment)
End If

Worksheets(environment).Activate
ActiveSheet.Range("A1:B" & returnedRowsCount) = returnData

Set rs = Nothing
Set cn = Nothing

ConsolidateUsers (environment)


End Sub

连接字符串:

"Provider=OraOLEDB.Oracle;Data Source=(DESCRIPTION=(CID=GTU_APP)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=xxxxxxx)(PORT=xxxx)))(CONNECT_DATA=(SID=xxxxx)(SERVER=DEDICATED)));User Id=xxxxxx;Password=xxxxxxx;"

您可以尝试访问 ADODB,如下所示

Dim strSQL  As String, conStr as String
Dim cnn As New ADODB.Connection
Dim rs As New ADODB.Recordset


conStr = "Provider=OraOLEDB.Oracle;Data Source=(DESCRIPTION=(CID=GTU_APP)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=xxxxxxx)(PORT=xxxx)))(CONNECT_DATA=(SID=xxxxx)(SERVER=DEDICATED)));User Id=xxxxxx;Password=xxxxxxx;"

Dim SQLQuery As String
SQLQuery = "SELECT User_Id, Prof_Id FROM user_profile ORDER BY User_Id ASC"

cnn.open conStr   
rs.Open SQLQuery, cnn, adOpenStatic, adLockOptimistic, adCmdText

我修复了这个错误,所以我会为发现此主题的有相同问题的任何人更新。

原来 'Catastrophic Failure' 错误是由于我的 Oracle ODBC 驱动程序 (oraOLEDB.oracle) 以某种方式损坏,我什至无法正确重新安装它,错误只发生在我的机器上.

最后我将系统恢复到问题之前的状态,一切都已修复。不是最优雅的解决方案,但它有效。