Sie sind auf Seite 1von 41

MODULO III

PROGRAMA EXCEL PARA EXPERTOS


Acceso a Bases de Datos con VBA para Excel
1.

INTRODUCCION GENERAL DEL MODULO

En el presente modulo desarrollaremos las pautas y conceptos para que mediante lo


aprendido en programacin en el modulo anterior, podamos construir aplicaciones eficientes
en VBA para Excel que interacten con orgenes de datos, en este caso base de datos en
Access, basndonos en el estndar ADO que abastece al desarrollador de clases que poseen
funcionalidad ya definida y que facilitan la construccin de este tipo de aplicaciones.
2.

OBJETIVOS GENERALES DEL MODULO

El participante al finalizar el modulo podr:

3.

Conocer las principales clases del estndar ADO.

Realizar consultas basadas en sentencias SQL, empleando objetos de la clase


Recordset

Realizar consultas parametrizadas en base a objetos de la clase Command

Realizar operaciones de mantenimiento de tablas, insertando, actualizando y


eliminando registros de una tabla, ya sea en la propia hoja de trabajo o en
formularios.

PRE REQUISITOS DEL MODULO

Haber llevado satisfactoriamente el modulo II , de fundamentos de programacin en Excel con


VBA

4.

CONTENIDO DETALLADO DEL MODULO


a. SESION 1
TEMARIO
Qu es ADO?
Que son los Providers?
Como referenciar a la Librera ADO
Principales clases de la Librera ADO
IMPORTANCIA
Esta sesin es importante dado que se definirn el concepto de ADO y se
establecern las pautas de cmo acceder desde nuestros proyectos a las clases de
esta librera.
CONTENIDO DESARROLLADO
ACCESO A DATOS CON ADO
Definicin:
Microsoft ActiveX Data Objects (ADO) es la estrategia de programacin Microsoft
a nivel aplicacin para interfase a datos e informacin. ADO provee acceso a datos
consistente, alto rendimiento y soporta una amplia variedad de necesidades de
desarrollo, incluyendo la creacin de clientes de bases de datos o front-end, usando
aplicaciones, herramientas, lenguajes, o navegadores de Internet. ADO est diseado
para ser la nica interfase a datos necesaria para sistemas cliente-servidor y
desarrollos basados en Web. ADO provee una interfase fcil de usar a nivel aplicacin
para OLE DB, que provee acceso a diferentes formatos de datos. Como ADO fue
diseado para combinar las mejores caractersticas y, eventualmente reemplazar
RDO y DAO, usa notacin similar con una semntica simplificada para hacer de l el
siguiente paso natural para los desarrolladores de hoy.
Arquitectura de ADO:
El modelo ADO contiene siete objetos:

LOS DATA PROVIDERS

Definicin:

Son interfaces a nivel de libreras registradas en el computador, que permiten la


interaccin de las aplicaciones con un determinado origen de datos (entindase
mejor Base de Datos).
Si estas libreras no estn instaladas en el computador donde se ejecuta la
aplicacin, esta no podr conectarse al origen de datos correspondiente
El proveedor OLE DB de Microsoft para Jet proporciona una interfaz OLE DB para
bases de datos de Microsoft Access que permite realizar consultas y
actualizaciones basadas en lenguaje SQL en bases de datos de Access y hojas de
clculo de Excel.

Algunos Proveedores

REFERENCIAR A LA LIBRERA ADO


Como agregar al proyecto una referencia a la librera ADO
En el mundo del desarrollo de aplicaciones no hay un mtodo nico, pero si
pautas a seguir para lograr el objetivo, en este caso interactuar con una base de
datos, desde un libro Excel.
Recuerde que la interaccin puede ser para realizar consultas (lo mas frecuente) o
realizar actualizaciones (agregar, modificar o eliminar informacin de la base de
datos)
Para poder emplear las clases de la librera ADO debe hacer una referencia a la
misma, tal como se indica en las siguientes figuras:

PRINCIPALES CLASES DE ADO


La clase Connection
La clase connection permite establecer una conexin con fuentes de datos. En otra
palabras, la representa una conexin fsica a una fuente de datos. El objeto
connection provee mecanismos para inicializar y establecer la conexin. Una vez que
el objeto conexin fue creado puede usar sus mtodos y propiedades para manipular
la fuente de datos (la base de datos) que fue conectada. Tambin puede utilizar el
objeto connection para ejecutar filtros y usar transacciones
Propiedades de la clase Connection
Propiedad
ConnectionString
ConnectionTimeOut
CommandTimeOut
State
Provider

Descripcin
Contiene la informacin necesaria para
establecer una conexin
Determina el tiempo a esperar para establecer
una conexin
Determina el tiempo a esperar mientras ejecuta
un comando
Indica si una conexin est abierta
Indica el nombre del proveedor de datos

Mtodos de la clase Connection


Mtodo
Open
Close

BeginTrans
CommitTrans
RollBackTrans

Descripcin
Abre una nueva conexin a una fuente de
datos
Cierra una conexin y todos sus objetos
dependientes
Inicia una transaccin
Procede con los cambios hechos durante la
transaccin
Cancela cualquier cambio hecho durante una
transaccin

Ejemplo de apertura y cierre de conexin

La Clase Recordset
Un objeto Recordset representa los registros en una tabla o los registros que resultan
de ejecutar un comando. En cualquier momento dado, el objeto Recordset direcciona
a un registro nico al que se refiere como el registro actual. Utilice objetos Recordset
para manipular datos de un proveedor.

Todos los objetos Recordset son construdos usando registros (renglones) y campos
(columnas). Dependiendo de la funcionalidad soportada por el proveedor, algunos
mtodos o propiedades del Recordset pueden no estar disponible.
Mtodos de Apertura y cierre
Open: Apertura el recordset, depositando el resultado de la consulta en la
instancia.
Close : Cierra el recordset una vez que este ya ha sido procesado.
Sintaxis de apertura del Recordset :
Rst.Open ( CadenaSQL, Conexin, Tipo Actualizacin, Tipo de Bloqueo, Tipo de Objeto)
Donde:
Cadena SQL: Es la consulta SQL que se va a ejecutar
Conexin: Es la instancia de conexin que apunta a la BD a consultar.
Tipo de Actualizacin: Opcional. Puede ser AdOpenDynamic o adOpenStatic.

Tipo de Bloqueo: Si el recordset se puede actualizar (AdLockOptimistic ) o no


(adLockReadOnly).
Tipo de objeto: Si se apertura con un texto SQL (adCmdText) o apuntando a una
tabla (adCmdtable)
Ejemplos de apertura de Recordset
Forma simple
rst.Open Select cod_pro,des_pro from tb_producto order by des_pro, cnx
Recordset de solo lectura
rst.Open Select cod_cli,ruc_cli from tb_Cliente ,cnx, adOpenDynamic,
adLockReadOnly
Recorset que abre una tabla para actualizarla
rst.Open Tb_Proveedor,cnx, adOpenDynamic, adLockOptimistic,adCmdTable
Ejemplo de cierre de Recordset
rst.Close
Mtodos de Desplazamiento:

MoveFirst: Primer registro del recordset


MoveLast : Ultimo registro del recordset
MovePrevious: Anterior registro
MoveNext : Siguiente registro

Propiedades de la clase Recordset


Propiedad BOF: Indica si estamos al inicio (True) o no (False) de un recordset.
Propiedad EOF: Indica si estamos al final (True) o no (False) de un recordset.
Recuerde que las filas y columnas de un recordset se contabilizan desde cero.

Ejemplo:
Si se ejecuta esta consulta:
Select cod_cli,raz_soc_cli,cod_dis from Tb_cliente
Se formara el siguiente recordset:
(0)

(1)

(2)
BOF

C001

Prisma S.A.

D02

C002

BS Grupo SCRL

D15

..

C050

Grupo Len S.A.

D02

EOF

PRACTICAS DESARROLLADAS
Practica Nro. 1:
En su libro LibroADO_01, codifique lo siguiente en el evento clic el botn
btnConsultarPrv (hoja PruebaProveedor) para obtener la informacin del proveedor
cuyo cdigo ingreso en la celda C6:

Practica Nro. 2:
En su archivo LibroADO_01 , en la hoja Listado2 , ingrese el siguiente cdigo para
obtener el listado de acuerdo al orden seleccionado

EJERCICIOS PRACTICOS
Ejercicio Nro. 1
Agregue al libro LibroADO_01 la hoja Listado3. Agregue un botn para que al
hacer clic sobre l se listen la razn social, direccin, telfono y nombre del
distrito de todos los proveedores ordenados por nombre de distrito (elija Ud. el
rango de salida). Agregue otro botn tambin para retornar a la hoja
MenuPrincipal
Ejercicio Nro. 2
Agregue al libro LibroADO_01 la hoja Listado4. Agregue un botn para que al
hacer clic sobre l se listen el numero de factura, fecha de factura, cdigo del
cliente y su razn social , as como el total facturado de todas las facturas,
ordenadas por razn social de cliente (ascendente)
y total facturado
(descendente, elija Ud. el rango de salida). Agregue otro botn tambin para
retornar a la hoja MenuPrincipal

b. SESION 2
TEMARIO
La clase Command
Consultas con Parmetros
IMPORTANCIA
En la presente sesin se revisara la importancia de emplear parmetros dentro de
una consulta, de tal forma de optimizar el planteamiento de solicitudes de datos por
parte del usuario con respecto al origen de datos., todo esto en funcin del empleo
correcto de la clase Command y su coleccin Parameters.
CONTENIDO DESARROLLADO
LA CLASE COMMAND
Definicin:
Command es una clase de ADO que permitir la ejecucin de una instruccin
entendida por el proveedor de datos que modificar, administrar o manipular la
fuente de datos. Los comandos son tpicamente escritos en SQL, aunque no se
requiere un lenguaje en particular.
Un comando de peticin (Query) requiere que el proveedor de datos regrese un
objeto Recordset que contiene filas de informacin. Especifique un comando como
cualquiera de los siguientes formas:
Texto comando, esto es, una cadena de literales o una variable que representa la
cadena.
Un objeto que representa al comando. En este caso, es el valor de una propiedad
Comando (Command) de un objeto CommandText establecido como el texto del
comando.

Ejemplo de Listado con comando:

Consultas con parmetros.

Los comandos pueden ser parametrizados. Un comando parametrizado consiste de


un texto de comando que puede ser modificado con un valor especificado por el
usuario cada vez que el comando es invocado.
Un comodn ("?") indica la parte del texto de comando que ser modificada. Cada
comodn en el texto de comando ser reemplazado con el valor del objeto Parameter
correspondiente en la coleccin Parameters cuando el comando sea ejecutado.
Hay dos maneras de crear un objeto Parameter y agregarlo a la coleccin Parameters
del objeto Command. La primera manera es crear un objeto Parameter, establecer
sus propiedades Nombre (Name), Tipo (Type), Direccin (Direction), Tamao (Size) y
Valor (Value) individualmente, y luego agregarlo a la coleccin Parameters. La
segunda manera es crear y establecer las propiedades del objeto Parameter con el
mtodo CreateParameters del objeto Command, y luego agregar el objeto Parameter
recin creado; todo en un solo estatuto.
Finalmente, llame a los mtodos Command.Execute o Recordset.Open para sustituir
los parmetros por los comodines y obtener un Recordset con los resultados de la
consulta.

PRACTICAS DESARROLLADAS
Practica Nro. 1
En su archivo LibroADO_Comandos, ubquese en la hoja Listado2 y codifique el
evento clic del botn btnListado tal como se indica a continuacin, de tal forma que
se obtenga un listado de productos pertenecientes a la lnea seleccionada:

EJERCICIOS PRACTICOS
Ejercicio Nro. 1:
En su archivo LibroADO_Comandos, ubquese en la hoja Listado3 y codifique el
evento clic del botn btnListado (manejando comandos con parmetros), de tal
forma que se obtenga un listado de clientes que estn ubicados en el distrito cuyo
cdigo ingrese en la celda C3.

Ejercicio Nro. 2:
En su archivo LibroADO_Comandos, ubquese en la hoja Listado4 y codifique el
evento clic del botn btnListado (manejando comandos con parmetros), de tal
forma que se obtenga un listado de proveedores que abastezcan el producto cuyo
cdigo ingrese en la celda C3.

c. SESION 3
TEMARIO
Realizar diversas consultas a la base de datos
Clientes por Distrito
Facturas por Clientes
Productos por Proveedor
Registro de Clientes
Registro de Vendedores
Registro de Distritos
Facturacin entre fechas
IMPORTANCIA
En la presente sesin resaltaremos la importancia de realizar consultas variadas
por parte del usuario, interactuando con controles como cuadros combinados y
formularios, empleando consultas con texto concatenado o con parmetros.
PRACTICAS DESARROLLADAS
Abra el archivo LibroADO_02 y desarrolle las siguientes prcticas
Practica Nro. 1
En la hoja FacturaClientes, al momento de cargarse la hoja (evento
Worksheet_Activate) codifique lo siguiente:

Por ltimo en el evento Click del botn btnMostrar ingrese el siguiente cdigo:

Practica Nro.2
En la hoja RegistroVendedor agregue los botones de navegacin (btnInicio,
btnAnterior, btnSiguiente y btnUltimo) asi como el botn de Bsqueda (btnBuscar).
Luego, codifique el evento clic de los botones de navegacin, as como el
procedimiento Mostrar para que el registro activo se muestre en las celdas de la
hoja, tal como se indica:

Por ltimo codifique el evento Click del botn btnBuscar, para la bsqueda directa
del registro en base al cdigo ingresado en la celda B8:

Practica Nro. 3:
Abra el archivo LibroADO_FechasCombos. Desde el editor de Visual Basic , en la
ventana del Explorador de Proyectos, ubique el formulario UserForm1. Desde la
ventana de cdigo de dicho formulario, en el evento Actvate ingrese lo siguiente, de
tal forma que por medio de los combos se pueden seleccionar das, meses y aos:

Luego, en el evento Click del botn btnConsultar codifique los siguiente para
obtener la facturacin entre 2 fechas dadas. Ntese que el rango de fechas debe ser
el correcto (la fecha de inicio no puede ser mayor que la de fin, como tambin
seleccionar fechas correctas de acuerdo al mes)

EJERCICIOS PRACTICOS
Ejercicio Nro. 1:
En la hoja ProductosPorProveedor desarrolle la siguiente consulta (con Texto
concatenado o con parmetros, a su eleccin):

Ejercicio Nro. 2:
En la hoja RegistroDistrito desarrolle la siguiente consulta, agregando los botones de
navegacin y bsqueda correspondientes. Ntese que el vendedor es el asignado a
cada distrito, as como su respectivo sueldo.

d. SESION 4
TEMARIO
Mantenimiento de Tablas
Insertar Registros
Actualizar Registros
Eliminar Registros
IMPORTANCIA
En esta sesin veremos como por medio de la clase Recordset no solo se pueden
obtener resultados, sino hacer operaciones de actualizacin de registros en las
tablas de la base de datos
CONTENIDO DESARROLLADO
MANTENIMIENTO DE TABLAS
Definicin:
En la programacin con bases de datos se entiende como Mantenimiento de Tablas
al proceso por el cual se actualizan los registros de una tabla de la base de datos. Se
habla entonces de:

Insertar registros
Actualizar registros
Eliminar registros
Consultar registros (buscar un registro por su cdigo)
Listar registros

Las ltimas 2 operaciones ya se han revisado en los captulos anteriores. Nos


concentraremos ahora en las operaciones de Insercin, Actualizacin y Eliminacin.
Hay que manejar 2 nociones previas.
La primera nocin es que los cambios no son inmediatamente hechos al Recordset;
en vez de eso, son hechos a una memoria intermedia de copia (copy buffer). Si Usted
decide que no desea los cambios, entonces la modificaciones en la memoria
intermedia son descartadas. Si decide mantener los cambios, entonces los cambios
en la memoria intermedia son aplicados al Recordset.
La segunda nocin es que los cambios pueden ser propagados a la fuente de datos
tan pronto como Usted declare completo el trabajo en una fila, (esto es, modo
inmediato). O todos los cambios a un conjunto de renglones son recogidos hasta que
Usted declare que el trabajo para el conjunto est completo (esto es, modo por
lotes). Estos modos estn gobernados por las propiedades de tipo de bloqueo.
En el modo inmediato, cada invocacin del mtodo Update propaga los cambios a la
fuente de datos.

Tambin se debe tomar en cuenta el tema de la integridad referencial. Al insertar


por ejemplo un cliente, se debe asignar como cdigo distrital un cdigo de distrito
que exista en la tabla Tb_Distrito.
Del mismo modo, no se puede eliminar un cliente que ha generado facturas o
eliminar un vendedor asignado a un distrito. Si intenta hacer estas operaciones el
proceso enviara un mensaje de error.
Los mensajes de error los puede manejar en sus etiquetas de error On Error Goto
como ya se explico anteriormente.
MANTENIMIENTO DE TABLAS EMPLEANDO LA CLASE RECORDSET
Como se apertura un objeto recordset para mantenimiento de una tabla
Si desea hacer un mantenimiento de una tabla desde un objeto de la clase recordset,
lo primero que debe tomar en cuenta que el recordset debe abrirlo en modalidad de
tabla , tal como se muestra en el ejemplo. Ntese como se apertura en base a una
tabla (Tb_Cliente)y no a una consulta SQL y al final se aplica la modalidad
adCmdTable.

Mtodos de Actualizacin de la clase recordset


Mtodo AddNew : Agrega un registro en blanco al recordset, con las columnas de
la tabla en base a la cual se apertura el objeto.
Mtodo Update : Actualiza los cambios realizados en el recordset , plasmando los
mismos en la base de datos.
Mtodo Delete: Elimina el registro donde actualmente se ubica el puntero de
registros en el objeto recordset.

Agregando un Registro:
En el siguiente cdigo se muestra como se adiciona un nuevo registro en la tabla de
clientes. El objeto rstClientes se encarga de el proceso, tras emplear a los mtodos
AddNew (con lo que se agrega un registro en blanco al recordset) y luego de llenar
dicho registro (procedimiento CargarRegistro en el cual los datos ingresados en la
celdas son derivados a cada columna del registro ) se invoca el mtodo Update para
actualizar el origen de datos.

Actualizando un registro:
Es algo similar al agregar, solo que previamente con el mtodo Find se busca el
registro a actualizar (ya se vio el empleo del mtodo Find en los captulos
anteriores). Luego de ello se invoca al procedimiento CargarDatos para que el
registro localizado sea llenado con los datos ingresados en las celdas y luego la
llamada al mtodo Update. Vea al siguiente cdigo:

Eliminando un registro
As como para actualizar un registro primero debe ser localizado con el mtodo Find,
para la eliminacin se da lo mismo. Tras ubicar el registro se da inicio al proceso de
eliminacin. Primero se pregunta al usuario si est seguro de eliminar el registro,
mediante un mensaje personalizado empleado la funcin Msgbox. Si la respuesta es
afirmativa se invoca al mtodo Delete del recordset rstClientes y de esa forma el
registro ser eliminado. Recuerde que no podr eliminar un registro que est
vinculado en otras tablas.

PRACTICAS DESARROLLADAS
Practica Nro. 1:
Empleando su archivo Excel MantenimientoVentas, hoja MantVendedor, elabore el
mantenimiento de la tabla Tb_Vendedor.

Solucin:

Practica Nro. 2:
Empleando su archivo Excel MantenimientoVentas, hoja MantProveedor, elabore el
mantenimiento de la tabla Tb_Proveedor, basado en el formulario frmProveedor

Solucin:

EJERCICIOS PRACTICOS

Elabore el mantenimiento de la tabla Tb_Producto en la hoja de trabajo


MantProducto.

e. SESION 5
TEMARIO
Transacciones
Ejercicios
IMPORTANCIA
En el presente capitulo se revisara la importancia de entender e implementar
operaciones transaccionales, muy empleadas en el caso de tablas cabecera
detalle, como facturas u rdenes de compra.
CONTENIDO DESARROLLADO
LAS TRANSACCIONES
Se define como transaccin a una operacin que consta de varios pasos
(acciones), que si se dan todas ellas exitosamente la operacin se confirma,
caso contrario la operacin se cancela.
Es una operacin atmica, o todas sus acciones son exitosas o no se establece
ninguna accin.
Un ejemplo comn de una transaccin es una aplicacin bancaria, donde una
operacin para deducir un cantidad de una cuenta y otra operacin para
depositar la misma cantidad en otra cuenta, ambas deben de ser exitosas. Si
una falla, entonces la otra debe de ser deshecha; de otra manera las cuentas
estarn fuera de balance.
Otro ejemplo comn se da en el caso de una factura. El registro de una factura
se da por insertar primero la cabecera y luego las lneas de detalle que tenga.
Si alguna de estas tuviera un problema, ya sea la cabecera o alguno de sus
detalles toda la operacin se cancela.
La clase Connection y las transacciones
La clase Connection es la que nos permite manejar una transaccin.
Provee del mtodo BeginTrans que establece el inicio de una transaccin.
Si la operacin es exitosa la transaccin se confirma empleando el mtodo
CommitTrans
Si alguna accin fracasa la transaccin se cancela con el mtodo RollbackTrans
Se sugiere en este ltimo caso de manejar el problema en el bloque de la
etiqueta de error que haya considerado en su programa.

PRACTICAS DESARROLLADAS
En base al archivo TransaccionesVentas elabore lo siguiente:
Practica Nro. 1:
En la hoja Ordenes desarrolle el cdigo para registrar una orden de compra . Primero
dirjase al editor de Visual Basic y desde el Explorador de Proyectos ubique el
formulario AgregarDetalle y codifique el evento Click del botn btnAgregar, tal como
se muestra a continuacin:

Ahora en la ventana de cdigo de la hoja rdenes, ingrese el siguiente cdigo en el


evento Click del botn btnGrabarOrden. Tras eso haga la prueba de registrar una
orden de compra.

EJERCICIOS PRACTICOS
Ejercicio Nro. 1:
En la hoja Facturas complete las plantillas proporcionadas para registrar
correctamente una factura. Recuerde que cada vez que agregue un detalle se debe
mostrar el subtotal y acumularlo en el rango TotalFacturado. As mismo, al eliminar
un detalle este total tambin se debe actualizar.

Das könnte Ihnen auch gefallen