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) 以某种方式损坏,我什至无法正确重新安装它,错误只发生在我的机器上.
最后我将系统恢复到问题之前的状态,一切都已修复。不是最优雅的解决方案,但它有效。
我正在开发一个 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) 以某种方式损坏,我什至无法正确重新安装它,错误只发生在我的机器上.
最后我将系统恢复到问题之前的状态,一切都已修复。不是最优雅的解决方案,但它有效。