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