jueves, 19 de junio de 2008

Conexión desde una Macro de Excel con Oracle

Bueno, pues después de ya algunos días, que digo!!!! mas de un mes sin colocar una entrada, comienzo nuevamente.
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!!!