2017-01-19 11 views
1

Я пытаюсь проверить данные в DB оракула с помощью ADODB. Я установил бит x64 Oracle Client и правильно настроил переменные среды. По некоторым причинам приведенный ниже код выдает automation error, что не очень помогает сузить проблему.не удалось подключиться к oracle11g db с помощью ADODB

PS: Я также пробовал то же самое, установив 32-битную версию клиента oracle.

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 

Сообщение об ошибке

*

Microsoft Visual Basic для приложений

Ошибка выполнения '-2147217843 (80040e4d)': Ошибка автоматизации OK Помощь

*

Мысль об обращении к специалистам поддержки.

ответ

0

Я не мог понять, что работает с Oracle в OraClient11g_home1. Поэтому я установил 32-разрядный Microsoft ODBC для Oracle и выполнил эту работу.

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