2017-12-06 18 views
0

원격 Oracle 11g 데이터베이스에 연결하고 쿼리를 실행 한 다음 Excel로 데이터를 반환 할 Excel VBA 프로그램을 개발 중입니다.VBA - ADODB 원격 Oracle 데이터베이스에 연결

내가 아는 한 연결 문자열과 드라이버는 모두 정상입니다. (아래 참조)

어제는 완벽하게 작동하여 db에 연결하고 정확한 데이터를 반환했습니다. 그런 다음 저장하고 통합 문서를 폐쇄 (아무런 변경이 없다!) 20분 나중에 열어 I 매크로를 실행했을 때 나는 다음과 같은 오류 있어요 :

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

오류의 원인이 될 수 있는지 어떤 아이디어? 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에 액세스하려고 할 수 이 스레드를 찾는 동일한 문제가 있습니다.

'Catastrophic Failure'오류는 Oracle ODBC 드라이버 (oraOLEDB.oracle)가 어떻게 든 손상 되었기 때문에 발생했기 때문에 제대로 다시 설치할 수 없었습니다. 오류는 내 컴퓨터에서만 발생했습니다.

결국 시스템은 문제가 발생하기 이전 시점으로 복원되었으며 모두 수정되었습니다. 가장 우아한 솔루션은 아니지만 효과가있었습니다.

0

당신이 그래도 난 내가 누군가를 위해 업데이트 할 수 있도록 내가 오류를 수정

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 
+0

데이터베이스가 저장되어있는 경로를'conStr'에 넣고 데이터베이스를 닫고 다시 시도하십시오. 감사. –

+0

수정 된 솔루션을 확인하십시오. 감사합니다 –

+0

감사합니다. 내가 수정 된 솔루션을 시도하고 지금은 이전 오류를 다시 반환 "런타임 오류 '-2147418113 (8000ffff)': 치명적인 오류"아마도 이것은 DB 설정을 할 무언가입니까? 아마 DBA 또는 다른 사람에게 다시 시작하려면 DBA에게 연락해야합니까? – gozu66