es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Conectar a la base de datos de Oracle desde Excel VBA

Necesito conectarme a una base de datos de Oracle a través de Excel VBA.

Agregué la biblioteca “”Micorost ActiveX Data Objects 6.1″” en VBA.

Como estoy usando la versión de 64 bits de Excel (en un Windows 10 de 64 bits), creo que no puedo usar “Microsoft ODBC for Oracle” (que parece ser solo de 32 bits); por eso, he instalado “”Oracle InstantClient v21.3″” (InstantClient Basic, InstantClient ODBC e InstantClient SDK; todos para Windows x64) en “D:\Program Files\Oracle ODBC” y luego lo instalé usando el archivo “”odbc_install.exe””.

He agregado esa carpeta a la variable de sistema PATH y a la variable de sistema TNS_ADMIN.

Mi TnsName.ora tiene la siguiente definición de base de datos:

DATAVIEW =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.x.x.x)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = **MyStats**)
    )
  )

Puedo conectarme a esa base de datos usando “PL SQL” y también cada vez que agrego una entrada en el “ODBC Data Source Administrator (64-bit)” de Windows 10, puedo conectarme a la base de datos. Además, usando la opción “Data -> Get Data -> From Other Sources -> From ODBC” en Excel, puedo ver la base de datos “MyStats” en la lista y puedo conectarme a ella.

Estoy intentando conectarme a esa base de datos usando el siguiente código en Excel VBA:

Dim Database_Connection As ADODB.Connection
Dim Record_Set As ADODB.Recordset
Dim Database_Connection_String As String

Set Database_Connection = New ADODB.Connection
Set Record_Set = New ADODB.Recordset

Database_Connection_String = "Provider=OraOLEDB.Oracle;Data Source=(DESCRIPTION=(CID=GTUAPP)(ADDRESSLIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.x.x.x)(PORT=1521)))(CONNECT_DATA=(SID=MyStats)(SERVER=DEDICATED)));User Id=MyName;Password=MyPass;"

With Database_Connection
    .ConnectionString = Database_Connection_String
    .Open
End With

Esto genera diferentes errores en tiempo de ejecución (en la línea “.Open”). He intentado suministrar “Provider=OraOLEDB.Oracle”, “Driver=Oracle in Oracle ODBC”. He intentado cadenas basadas en TNS y autónomas (dando “Data Source=”, “Server=”, “DBQ=” y …). Obtengo el error de tiempo de ejecución 3706 que dice que el proveedor es desconocido o el error de tiempo de ejecución -2147217805 (80040e73).

He buscado en muchos foros y he leído muchos ejemplos. Dependen de Microsoft ODBC para Oracle (que es lo que no quiero usar) o hacen que el código se ejecute de alguna manera que no puedo replicar.

¿Puedo dar un nombre de “Proveedor” diferente en la cadena de conexión o en el controlador?

Agradecería si pudieras darme tanto cadenas basadas en TNS como autónomas.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para conectarse a una base de datos de Oracle a través de Excel VBA, se puede utilizar el siguiente código:

    Dim Database_Connection As ADODB.Connection
    Dim Record_Set As ADODB.Recordset
    Dim Database_Connection_String As String
    
    Set Database_Connection = New ADODB.Connection
    Set Record_Set = New ADODB.Recordset
    
    Database_Connection_String = "Driver={Oracle in OraClient21Home1};Dbq=10.x.x.x:1521/MyStats;Uid=MyName;Pwd=MyPass;"
    
    With Database_Connection
        .ConnectionString = Database_Connection_String
        .Open
    End With
    

    En la cadena de conexión, reemplace “MyStats” con el nombre real de su base de datos, “MyName” con su nombre de usuario real y “MyPass” con su contraseña real.

    Si prefiere usar una cadena basada en TNS, puede usar la siguiente:

    Database_Connection_String = "Driver={Oracle in OraClient21Home1};Dbq=MyTNSName;Uid=MyName;Pwd=MyPass;"
    

    En este caso, reemplace “MyTNSName” con el nombre real de su TNS de su archivo TNSNames.ora.

    Tenga en cuenta que el nombre del controlador utilizado en la cadena de conexión se basa en la versión de Oracle Instant Client que instaló. En este ejemplo, se utilizó “Oracle in OraClient21Home1”, que corresponde a la versión “21.3”. Si instaló una versión diferente, deberá ajustar el nombre del controlador en consecuencia.

    Además, asegúrese de que la ruta de instalación de Oracle Instant Client se agregue a su PATH del sistema y que la variable del sistema TNS_ADMIN esté configurada con el directorio que contiene su archivo TNSNames.ora.

Comments are closed.