Академический Документы
Профессиональный Документы
Культура Документы
cursovisualexcel.wordpress.com /category/excel-y-bases-de-datos/
Como hacamos en otras macros, es necesario como paso previo tener activadas las referencias oportunas:
Microsoft ActiveX Data Objects 2.x. Este ejemplo ha sido desarrollado con la versin Oracle Database Express
Edition. Para ello he creado una pequea tabla EMPLEADOS con tres campos ID, NOMBRE y EDAD.
Veamos el cdigo:
Sub excel_oracle()
Definiendo las variables para la conexin, reordset, columnaumnas y filas
Dim conexion As ADODB.Connection
Dim rs As ADODB.Recordset
Dim columna As Integer
Dim fila As Integer
parmetros de la conexin
conexion.Open ( _
User ID=system & _
;Password=root & _
;Data Source=XE & _
;Provider=MSDAORA.1)
rs.MoveNext
Loop
End Sub
El fragmento de cdigo referente a la conexin, nos marca los parmetros que se precisan para realizar la misma:
el usuario (en este caso system) , la contrasea (root) el origen de los datos (la base de datos XE) y el proveedor
OLEDB de Microsoft para Oracle que es MSDAORA.1.
Despus lanzamos la orden SQL y presentamos los datos con dos bucles, uno para la cabecera, y otro para los
datos. Y aqu el resultado:
2/13
Filed under Excel y bases de datos Tagged with Oracle
Como continuacin del post anterior, en este vamos a tratar la conexin de Excel con el gestor de bases de datos
MySQL. Las operaciones que se pueden realizar entre una hoja Excel y una base de datos pueden ser
variadas,tanto como para trabajar un tutorial aparte. No obstante se pueden abordar las principales:
En el post anterior trat de como crear una base de datos en Access, con sus tablas y campos; y el volcado
posterior de datos de Excel hacia Access. Ms adelante ir tratando el resto de operaciones que podemos efectuar
entre los dos programas de Microsoft, mediante VBA.
1. Debemos crear el espacio de trabajo, donde debemos especificar a Excel el motor que se precisa para
hacer la conexin al gestor de bases de datos.
2. Tenemos que marcar las referencias especficas para que Excel la carge y la tenga disponible en su
biblioteca.
3/13
3. Preparamos las variables para:
la conexin
servidor
usuario
contrasea
nombre de la base con la que trabajar
las tablas y campos en su caso.
Una vez tratado los datos, es decir ejecutada la peticin, cerrarmos la conexin y vaciamos las variables objeto.
Bien en el caso que nos ocupa y, atendiendo al primer punto, debemos cargar la referencia a la librera Microsoft
Active X Data Objects 2.x .
Lo ms probable es que no tenga descargado los drivers para la conexin con MySQL. Para ello vaya a esta
direccin MySQL ODBC 3.51 Driver. Le aconsejo que escoga Windows (x86, 32-bit), MSI Installer Connector-
ODBC para 32-bit y en caso de 64 Windows (x86, 64-bit), MSI Installer Connector-ODBC. Una vez
descargadodoble clic en el MSI y escoga instalacin tpica.Una vez terminada la instalacin, puede verificar la
misma en Panel de Control>Herramientas Administrativas>Orgenes de datos ODBC. Clic en la pestaa Drivers y
bsquelo en la lista:
A continuacin le expongo comentado el cdigo para volcar los datos de una base de datos de MySQL a Excel. En
el ejemplo la base que se ha empleado se llama directorio y la tabla example. Se ha utilizado un servidor local,
con lo que la direccin del host es la 127.0.0.1. Para poder practicar le aconsejo que inserte una nueva base de
datos, sino tiene una ya creada, con una tabla y unos pocos datos.
4/13
Para empezar y como paso previo cargamos la referencia a la librera Microsoft Active X Data Objects 2.x
Se presupone instalado el driver MySQL ODBC 3.51
Comenzando
Sub excelMySQL()
variable para la conexin
Dim conexion As New ADODB.Connection
idem para el nombre del servidor en este caso estoy empleando una versin en local
Dim miservidor As String
variables para usuario y contrasea (no la creo porque no la tengo en el servidor, en otro caso hay que crearla
Dim user As String
el recordset
Dim rs As ADODB.Recordset
Estableciendo la conexin
miservidor = 127.0.0.1
bd = directorio
user = root
Set conexion = New ADODB.Connection con esto utilizamos la conexin indicada ms arriba
Cerramos la conexin
On Error Resume Next
rs.Close
Set rs = Nothing
conexion.Close
Set conexion = Nothing
On Error GoTo 0
End Sub
Habr podido observar una lnea : rs.Open consulta, conexion, adOpenStatic. Quisiera comentarla un poco. El
objeto Recordset es el interface entre los datos obtenidos de nuestras consultas sobre las tablas y nuestras
pginas excel. Representa una tabla organizada en filas (registros) y columnas (campos). La propiedades y
mtodos de Recordsets pasan por entender el funcionamiento de otros dos objetos claves:
El cursor o puntero que nos permite desplazarnos por los registros del recordset. Dependiendo del tipo elegido
determinaremos los desplazamientos y cambios realizables en los datos.
El tipo de cursor lo definiremos mediante la propiedad CursorType, los posibles valores son:
El otro objeto es el cierre o tipo de bloqueo que efectuaremos en la base de datos cuando modifiquemos un
recordset, a fin de evitar que dos o mas usuarios accedan a modificar un mismo registro a la vez.
El tipo de cierre lo definiremos mediante la propiedad LockType, los posibles valores son:
6/13
Por ltimo habr podido observar el parmetro : & ;OPTION=16427. Esto nos asegura que los valores numricos
de tipo large son interpretados correctamente por Excel.
En este post voy a intentar explicar como utilizar objetos para crear bases de datos, introducir datos, modificar su
contenido o crear consultas, mediante VBA Excel.
Excel ya lleva incorporada una serie de funciones para trabajar con bases de datos, que gestionan mltiples tareas
para el usuario. Si queremos, no obstante, automatizar y potenciar estas tareas debemos hacer uso de VBA.
Las aplicaciones utilizan unos mecanismos para conectarse a bases de datos (en adelante BD). Son los ActiveX
Data Objects (ADO),.
Con ADO, un programa puede leer, insertar, editar, o borrar, la informacin contenida dentro de la base de datos.
Adems, se puede manipular la propia base para crear nuevas tablas, como tambin alterar o eliminar las ya
existentes, entre otras cosas.
ADO sustituy a DAO y a RDO (para BD remotas) que eran los sistemas previos que se usaban.
La ltima versin de ADO, creada por Microsoft, se llama ADO.NET, y se usa en los entornos de programacin de
la plataforma .NET, de Microsoft, para manejar bases de datos tanto en Windows como en la Web mediante
ASP.NET, que es la nueva versin del ASP para la plataforma.NET.
Comenzaremos para aquellos que trabajan con versiones antiguas de BD, trabajando con DAO.
Para utilizar los objetos de acceso a datos, lo primero que debemos hacer es crear una referencia a estos objetos.
Para ello recuerde dentro del editor VBA vamos a Herramientas-Referencias-Microsoft DAO 3.6 Object Library.
Cuando cargamos esta referencia se crea un primer objeto del que se derivan los dems con los que vamos a
trabajar: DBEngine, a partir del mismo obtendremos los espacios de trabajo (Workspace) donde se encontrarn
cada una de las BD (database).
7/13
Una vez creada la BD obtendremos las TableDef por cada tabla
que creemos con sus respectivos campos (Fields) y el ndice de
referencia de cada tabla (Index).
Dim bd As Database
End Sub
Si no tiene activada la referencia comprobar que no en la seleccin del tipo de variable objeto, no le aparece la
opcin Database y por lo tanto tendr un error.
Con el mtodo CreateDatabase escribimos como argumentos la ruta y el nombre del fichero a crear. Si no
escribimos nada en la extensin tomar el tipo por defecto que es Acces mdb.
Si en vez de crear manualmente la carpeta desea automatizarlo debera crear los procedimientos para verificar la
ruta / archivo y en su caso crear la BD. Veamos:
comprobamos que en dicha ruta no existe ya una carpeta con el mismo nombre aunque est oculta
8/13
End If
End If
End Sub
Y para crear la BD
Dim bd As Database
End Sub
Revise las funciones Medir y Dir, que realmente son comandos de MS-DOS adaptados a VBA.
Bien hemos creado la BD pero como comprobar est vaca. Por lo tanto hemos de crear las tablas, los campos y
los ndices.
Para las tablas emplearemos el TableDef y para los campos Field como tipos.
Para crear los campos, al igual que en Access debemos indicar el nombre y su tipo.
Set fldnombre= td.CreateField(Nombre,dbTex,8) es decir el nombre del campo, el tipo segn Access y su longitud.
9/13
Por ltimo escribiramos las sentencias para aadir los campos a la tabla, y la tabla a la base de datos.
Dim bd As Database
Dim td As TableDef
ahora la tabla
Set td = bd.CreateTableDef(MiTabla)
td.Fields.Append fldalias
10/13
td.Fields.Append fldnombre
td.Fields.Append fldapellidos
td.Fields.Append flddireccion
td.Fields.Append fldpoblacion
td.Fields.Append fldtelefono
td.Fields.Append fldnacimiento
aadiendo la tabla
bd.TableDefs.Append td
End Sub
Si abre ACCESS ver que se ha creado la base de datos, con la tabla y los campos correspondientes. Tambin
comprobar que lo ha hecho en modo Access 2000.
Una forma alternativa y ms cmoda podra ser crear los campos con un bucle Withwend. En el ejemplo
siguiente podr ver cmo adems creamos un campo autoincrementable:
necesito crear un campo contador para ello lo creo aparte de los otros
Set id = td.CreateField(Id, dbLong)
id.Attributes = dbAutoIncrField
td.Fields.Append id
creando y aadiendo el resto de campos de una sla vez
With td.Fields
11/13
.Append td.CreateField(apellidos, dbText, 30)
.Append td.CreateField(nombre, dbText, 30)
.Append td.CreateField(direccin, dbText, 50)
.Append td.CreateField(poblacin, dbText, 30)
.Append td.CreateField(tel, dbLong)
End With
bd.TableDefs.Append td
If Error = Then
MsgBox Base de datos creada
End If
End Sub
Bien hasta ahora lo que hemos hecho es crear la base, las tablas etc Pero todava no hemos volcado los datos a
Access. Veamos como podriamos hacerlo:
abriendo recordset
Set rs = bd.OpenRecordset(MiTabla, dbOpenTable)
With rs
.AddNew
.Fields(Alias) = Range(B & r).Value
.Fields(apellidos) = Range(C & r).Value
.Fields(nombre) = Range(D & r).Value
.Fields(direccin) = Range(E & r).Value
.Fields(poblacin) = Range(F & r).Value
.Fields(tel) = Range(G & r).Value
.Update
End With
r=r+1
Loop
x = rs.RecordCount
12/13
cerramos
rs.Close
Set rs = Nothing
bd.Close
Set bd = Nothing
If Error = Then
MsgBox Exportacin correcta se han creado & x & registros.
End If
End Sub
Para elminarla
Sub eliminar_bd()
Kill (C:\mi_bd.mdb)
End Sub
13/13