2017-01-19 3 views
1

ADODB를 사용하여 oracle DB의 데이터의 유효성을 검사하려고합니다. Oracle Client x64 비트를 설치하고 환경 변수를 올바르게 구성했습니다. 어떤 이유로 든 아래의 코드는 automation error을 던집니다. 문제의 범위를 좁히는 데별로 도움이되지 않습니다.ADODB를 사용하여 oracle11g db에 연결할 수 없습니다.

추신 : 나는 오라클 클라이언트의 32 비트 버전을 설치하여 동일한 시도를했습니다. 자동화 오류 OK 도움말

: 응용 프로그램

런타임 오류 '-2147217843 (80040e4d)'에 대한

Sub test() 
    myHost = "" 
    Database_Name = "" 
    myUsername = "" 
    myPassword = "" 
    serviceID = "" 
    myPort = "" 

    strConnectionString = "Driver={Oracle in OraClient11g_home1}; " & _ 
          "SERVER=(DESCRIPTION=" & _ 
          "(ADDRESS=(PROTOCOL=TCP)" & _ 
          "(HOST=" & myHost & ")(PORT=" & myPort & "))" & _ 
          "(CONNECT_DATA=(SERVICE_NAME=" & serviceID & "))); uid=" & myUsername & ";pwd=" & myPassword & ";" 

    Debug.Print strConnectionString 
    'Instantiate the Connection object and open a database connection. 
    Set cnn = CreateObject("ADODB.Connection") 
    cnn.Open strConnectionString 
    'Above line throws error 


End Sub 

오류 메시지

*

마이크로 소프트 Visual Basic의

*

전문가 지원에 연락하는 생각.

답변

0

OraClient11g_home1 드라이버에서 오라클과 작동하지 않습니다. 그래서 32 비트를 설치했습니다 오라클 용 Microsoft ODBC 및 작업 완료.

Set objCon = CreateObject("ADODB.Connection") 
Set objRec = CreateObject("ADODB.RecordSet") 
Dim fieldName, fieldValue 
Dim host_name: host_name = "" 
Dim service_name: service_name = "" 
Dim user_name : user_name = "" 
Dim pass : pass = "" 
Dim strSQL : strSQL = "" 
Dim data_array 
data_array = Array("","","") 

conStr = "Driver={Microsoft ODBC for Oracle};Server=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=" & host_name & ")(PORT=1525))(CONNECT_DATA=(SERVICE_NAME=" & service_name & "))); Uid=" & user_name & ";Pwd=" & pass &";" 
objCon.Open conStr  

objRec.Open strSQL, objCon 

Set objFields = objRec.Fields 
Do Until objRec.EOF 
    For intLoop = 0 To (objFields.Count - 1) 
     fieldName = objFields.Item(intLoop).Name 
     fieldValue = objFields.Item(intLoop).Value   
     If Cstr(fieldValue) = Cstr(data_arr(intLoop)) Then 
      Debug.print "Check value of " & fieldName & " Value of " & fieldName & " in DB " & fieldValue & " is same as application " & data_arr(intLoop) 
     Else 
      Debug.print "Check value of " & fieldName & " Value of " & fieldName & " in DB " & fieldValue & " is not same as application " & data_arr(intLoop) 
     End If 
    Next 
    objRec.MoveNext 
Loop 

objRec.Close 
objCon.Close