Ahora el problema y la solución que les comparto es algo sencillo pero muy "útil" cuando queremos trabajar con datos de una base de datos (en Oracle) en algún archivo de Excel. Quizá queremos consultar información únicamente, quizá queremos realizar inserciones a nuestra base de datos.
Lo primero que tenemos que hacer es instalar el cliente de Oracle (en caso de que no lo tengamos). Este paso del "cliente" lo vamos a obviar ya que el tema solo trata sobre la conexión desde una macro con Oracle.
Bueno, cuando tengamos abierto nuestro archivo de Excel, presionemos las teclas Alt-F11 para abrir el Visual Basic. Para realizar la conexión, así como las consultas se utilizan los objetos ADODB.Connection y ADODB.Recordset, respectivamente. Entonces necesitamos agregar un módulo que contenga estos objetos. para ello, vamos el menú Herramientas->Referencias y buscamos el objeto Microsoft ActiveX Data Object x.x Library (x.x versión del módulo), lo seleccionamos y lo agregamos.
Ahora creamos nuestro módulo para la macro que se conectará a Oracle y realizamos lo siguiente:
Sub conexion_a_oracle()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
'realizamos la conexion con Oracle, "usuario" es el nombre de usario para conectarse
' "password" la contraseña para conectarse y "esquemaBd" y nombre de la base de datos
cn.Open ( _
"User ID=usuario" & _
";Password=password" & _
";Data Source=esquemaBd" & _
";Provider=MSDAORA.1")
'con esto ya hemos conectado a Oracle, ahora para realizar una consulta y recorrer los
'resultados en una celda seria como sigue
rs.Open "select trim('hola a todos ') from dual", cn
row = 0
Do While Not rs.EOF
row = row + 1
col = 0
Do While col < rs.Fields.Count
fila = "A" & (row)
Range(fila) = rs.Fields(col).Value
col = col + 1
Loop
rs.MoveNext
Loop
'Cerramos el recorset y la conexion
rs.Close
cn.Close
End Sub
Con esto hemos finalizado la conexión con Oracle desde una Macro de Excel. Cualquier duda, sugerencia o comentario no dejen de escribir...
Espero que les ayude!!!
7 comentarios:
s
Que tal Isaí, me parecen buenos los temas que pones, de manera personal me gustaria que pusieras algo sobre optimizacion de consultas en oracle, o planes de ejecucion del dbms.
Saludos y a ver cuando invitas una cerveza. :D
me cae que cuando tengá examen de informatica te voy a venir a preguntar XD
Excelente tema, me ayudo mucho, saludos!
Gracias, me has sacado de un enorme lio
Hola buenos dias, te escribo para poder solicitar una ayuda.
Yo necesito conectarme a una BD de oracle desde una macro de excel, eso ya me sale, pero no encuentro la forma de ejecutar un procedimiento del oracle desde esta macro. Yo uso.
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
cn.Open ("User ID=prueba;Password=inicio;Data Source=DBPRODUC;Provider=OraOLEDB.Oracle")
rs.Open "SELECT sysdate FROM dual", cn
Row = 0
Do While Not rs.EOF
Row = Row + 1
col = 0
Do While col < rs.Fields.Count
fila = "A" & (Row)
Range(fila) = rs.Fields(col).Value
col = col + 1
Loop
rs.MoveNext
Loop
rs.Close
cn.Close
Pero el problema es que tengo una sentencia SQL que lleva un monton de parametros (20 lineas de instruccion aprox), para ello, en el oracle cree el procedure, pero nose como llamarlo desde aca.
Agradeceria si tienes alguna forma de poder ayudarme, me gustaria si tuvieses un ejemplo o, mas aun, si puedes explicarme.
Muchas gracias de antemano
En la parte CON.Open se detiene y genera este error: Provider cannot found. It may not be properly installed.
Publicar un comentario