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

时间:2017-12-06 12:13:52

标签: excel vba oracle11g adodb

我正在开发一个Excel VBA程序,我想连接到远程Oracle 11g数据库,运行查询,并将数据返回给Excel。

就我所知,连接字符串和驱动程序都可以。 (见下文)

它昨天工作了一段时间,连接到db并返回正确的数据。然后我保存并关闭了工作簿,20分钟后打开它(没有更改!)当我运行宏时出现以下错误:

  

运行时错误'-2147418113(8000ffff)':灾难性故障

任何可能导致错误的想法? 这可能是DB的一面吗?

由于

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;"

2 个答案:

答案 0 :(得分:0)

您可以尝试按以下方式访问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

答案 1 :(得分:0)

我修复了错误,所以我会更新任何遇到相同问题的人找到这个帖子。

事实证明,“灾难性故障”错误是由于我的Oracle ODBC驱动程序(oraOLEDB.oracle)以某种方式损坏,我甚至无法正确地重新安装,错误只发生在我的机器上。

最后,我做了一个系统恢复到问题之前的一个点,并且一切都已修复。不是最优雅的解决方案,但它有效。