proyecto fin de carrera - bibing.us.esbibing.us.es/proyectos/abreproy/12278/fichero/pfc_bbdd.pdf ·...
TRANSCRIPT
cu Equation Chapter 1 Section 1
Proyecto Fin de Carrera
Ingeniería de Telecomunicación
Autor: Manuel Herrera Bermejo
Tutor: Juan Antonio Ternero Muñiz
Dep. Telemática
Escuela Técnica Superior de Ingeniería
Universidad de Sevilla
Sevilla, 2015
Diseño de una base de datos del funcionamiento
de un taller de fabricación de mazos de cables
e implementación en Microsoft Access
Proyecto Fin de Carrera
Ingeniería de Telecomunicación
Diseño de una base de datos del funcionamiento
de un taller de fabricación de mazos de cables
e implementación en Microsoft Access
Autor:
Manuel Herrera Bermejo
Tutor:
Juan Antonio Ternero Muñiz
Dep. de Telemática
Escuela Técnica Superior de Ingeniería
Universidad de Sevilla
Sevilla, 2015
Proyecto Fin de Carrera: Diseño de una base de datos del funcionamiento de un taller de fabricación de
mazos de cables e implementación en Microsoft Access
Autor: Manuel Herrera Bermejo
Tutor: Juan Antonio Ternero Muñiz
El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros:
Presidente:
Vocales:
Secretario:
Acuerdan otorgarle la calificación de:
Sevilla, 2015
El Secretario del Tribunal
Agradecimientos
Durante los años de trabajo empleados para la realización de esta carrera, muchas han sido las personas que han
contribuido a que este proyecto se hiciera realidad, todas ellas merecen mi reconocimiento y consideración.
- A mi familia, porque siempre me empujaban a seguir adelante en las situaciones difíciles.
- A Sandra, porque me aguantó en estos largos años de estudio y fue un apoyo constante.
- A todos mis compañeros de estudio. Por aquellas largas noches de insomnio, las dioptrías han merecido
la pena.
- A todos los profesores, por su dedicación y esfuerzo.
- A todos mis amigos, por los buenos momentos que te hacen olvidar los problemas.
Manuel Herrera Bermejo
Ingeniero de Telecomunicaciones
Sevilla, 2015
Resumen
En este proyecto se abordará la construcción de una base de datos en Microsoft Access. Está basado en unas
prácticas que hizo el autor para la empresa “Airbus Defence And Space” en Sevilla en 2014.
Desde hace unos años Airbus intenta actualizar sus métodos de recogida y cruce de datos. Para este fin se
adjudicó este proyecto, que tuvo 4 meses de duración.
El principal objetivo de esta base de datos será tener una visión actualizada del trabajo del taller eléctrico, y
además, eliminar los archivos Excel donde se cumplimentaban los datos. En un principio, estará programada
para permitir la entrada de datos por archivos Excel además de por formularios. Se hizo así para que sirviera de
solución puente para aquellas personas que sólo sabían manejarse con hojas de datos.
Otros objetivos que se perseguían eran la centralización de la información, la mejora de la consistencia y
accesibilidad de la información, la mejora de la usabilidad de la interfaz, la seguridad y fiabilidad del sistema y
el uso de un software existente ya en la empresa.
Microsoft Acceess cumplía todos estos requisitos, y además, permitía vincular hojas de datos a nuestra base de
datos de una forma fácil. Con este sistema de vinculación nuestra aplicación tendrá en todo momento una tabla
copia de los archivos Excel de entrada.
En definitiva, nuestro sistema será capaz de organizar el trabajo diario de las distintas áreas de fabricación, y
proporcionar informes para que control de producción pueda mejorar la productividad en un futuro.
Abstract
This project was based on the completion of a Microsoft Access database for the company Airbus.
The main objective of this database will be the elimination of Excel files. Initially, it will be programmed to
accept data in two ways: by Excel files and by forms. It was created as such to bridge the gap for people who
have only known how to handle datasheets. In addition, our system will offer a higher level of security and
reliability, as well as ease in information accessibility.
Microsoft Access met all of these requirements, and it allowed us to easily link datasheets to our database.
In short, our system will be capable of organizing the daily work of each different manufacturing area, as well
as will provide reports so that production control can improve productivity in the future.
Índice
Agradecimientos 7
Resumen 9
Abstract 11
Índice 13
Índice de Tablas 15
Índice de Figuras 17
1 Introducción 1 1.1 Decisiones técnicas 3
2 Utilidad para la empresa 5
3 Sistemas de gestión de base de datos 7 3.1 Características de los gestores de bases de datos 7 3.2 Ventajas e inconvenientes de los gestores de bases de datos. 8 3.3 Microsoft Access 9
4 Funcionamiento del taller 13
5 Búsqueda de dependencias funcionales 17 5.1 Búsqueda del diagrama E-R 17 5.2 Cumplimiento de las formas normales 18
5.2.1 Primera forma normal 18 5.2.2 Segunda forma normal 18 5.2.3 Tercera forma normal 19
5.3 Reducción de dependencias funcionales 19 5.3.1 Descripción de las entidades y atributos. 19 5.3.2 Esquema de relaciones 20 5.3.3 Asignación de relaciones 21 5.3.4 Reducción de relaciones 21
5.4 Creación de las tablas 22
6 Desarrollo de la base de datos 25 6.1 Vinculación de los archivos excel de entrada 25
6.1.1 Pasos para la vinculación 25 6.2 Creación de las tablas 27 6.3 Relaciones entre tablas 28
6.3.1 Creación del esquema de relaciones 29 6.4 Formularios de navegación 30
6.4.1 Controles para el formulario navegación 32 6.4.2 Creación de macros. 36 6.4.3 Creación de consultas 37
6.5 Formularios para la entrada de datos. 38 6.6 Generación de informes 43
7 Implementación de la base de datos 47 7.1 Formularios de navegación 47
7.1.1 Formulario “Control de acceso” 47 7.1.2 Formulario ”Inicio” 51 7.1.3 Formulario “Planificación de Áreas” 54 7.1.4 Formulario “Informes de seguimiento” 58 7.1.5 Formulario “Varios” 63 7.1.6 Formulario “Comerciales” 65 7.1.7 Formulario “Pruebas” 67 7.1.8 Formulario “Paradas” 68 7.1.9 Formulario “Producción” 70
8 Conclusiones 73 8.1.1 Conclusiones técnicas 73 8.1.2 Conclusiones personales 74
Bibliografía 75
Anexos 77 10.1.1 Los objetos en Visual Basic 77 10.1.2 Concepto de encapsulación (Public v.s. Private) 78 10.1.3 Utilización de variables de objeto 78 10.1.4 Variables estáticas 79 10.1.5 Cadenas de caracteres largas. 79 10.1.6 Instrucción Recordsets 79 10.1.7 Como crear colecciones de objeto 80 10.1.8 Acceder a los elementos de una colección. 80
ÍNDICE DE TABLAS
Tabla 4–1. Tipos de mesas de fabricación. 6
Tabla 5–1. Tabla Mazo_Concreto_Tipo. 13
Tabla 5–2. Tabla Cables 13
Tabla 5–3. Tabla Contiene. 14
Tabla 5–4. Tabla Suministra 14
Tabla 5–5. Tabla Cables. 15
Tabla 5–6. Tabla Proveedores. 15
Tabla 5–7. Tabla Mesa. 15
ÍNDICE DE FIGURAS
Figura 1-1. Ejemplo de hoja de datos. 1
Figura 1-2. Ejemplo de formulario de entrada de datos. 2
Figura 3-1. Ejemplo de formulario de navegación Access. 3
Figura 4-1. Ejemplo hoja de cálculo de comerciales. 13
Figura 4-2. Ejemplo de hoja de cálculo”Proveedores_Cables” 14
Figura 4-3. Ejemplo de hoja de cálculo”Cableado” 14
Figura 4-4. Ejemplo de registros en el “Part Master” 14
Figura 4-3. Ejemplo de hoja de cálculo “Pruebas” 15
Figura 5-1. Árbol entidad-relación 17
Figura 5-2. Ejemplo de fallo en segunda forma normal. 18
Figura 6-1. Vinculación Excel 1 25
Figura 6-2. Vinculación Excel 2 26
Figura 6-3. Vinculación Excel 3 26
Figura 6-4. Creación de tablas 27
Figura 6-5. Esquema de relaciones. 28
Figura 6-6. Creación del esquema de relaciones 1. 29
Figura 6-7. Creación de los formularios de navegación 1. 30
Figura 6-8. Menú “Controles” de formulario de navegación. 30
Figura 6-9. Ejemplo de formulario de navegación. 31
Figura 6-10. Programación de botones. 31
Figura 6-11. Menú “Controles”. 32
Figura 6-12. Ejemplo hoja de propiedades. 33
Figura 6-13. Ejemplo de cuadro combinado. 34
Figura 6-14. Propiedades de un cuadro de lista. 34
Figura 6-15. Campos verificación. 35
Figura 6-16. Grupo de opciones. 35
Figura 6-17. Creación de macros. 36
Figura 6-18. Creación de macros 2. 37
Figura 6-19. Ejemplo de consulta. 38
Figura 6-20. Creación de los formularios de entrada de datos 1. 38
Figura 6-22. Creación de los formularios de entrada de datos 3. 39
Figura 6-23. Formulario de entrada de datos. Menú herramientas. 39
Figura 6-24. Formulario de entrada de datos. Lista de campos. 40
Figura 6-19. Formulario de entrada de datos. Menú controles. 40
Figura 6-19. Formulario de entrada de datos. Configuración de campos. 41
Figura 6-21. Formulario “Comerciales”. 41
Figura 6-19. Ejemplo uso de subformulario. 42
Figura 6-21. Consulta “Pruebas” 43
Figura 6-21. Informe “Pruebas” 44
Figura 6-21. Menú herramientas. 44
Figura 6-21. Creación de informes “Hojas de propiedades”. 44
Figura 6-26. Creación de informes. Menú herramientas. 45
Figura 6-27. Creación de informes. Lista de campos. 45
Figura 6-28. Informe “Pruebas” 46
Figura 7-1. Formulario “Inicio” 51
Figura 7-2. Macro “Actualización” 51
Figura 7-3. Consulta “Anexar Comerciales_vinculada”. 52
Figura 7-4. Consulta “Actualiza Mazo_conc_tipo”. 53
Figura 7-5. Macro botón “Informes de Incidencias” 53
Figura 7-6. Formulario “Planificación de Áreas” 54
Figura 7-7. Consulta “Carga Baja” 54
Figura 7-8. Formulario “Carga Baja” 55
Figura 7-9. Informe “P/N sin pulsos consumidos Carga Media” 55
Figura 7-10. Informe “Mazos sin fabricar” 56
Figura 7-11. Informe “Órdenes paradas” 56
Figura 7-12. Consulta “Órdenes paradas” 57
Figura 7-13. Formulario “Informes de seguimiento” 58
Figura 7-14. Informe “Pruebas” 58
Figura 7-15. Consulta “Pruebas” 59
Figura 7-16. Consulta “Motivo_fallos_prueba” 60
Figura 7-16. Consulta “Motivo_fallos_prueba” 60
Figura 7-16. Consulta “Mazos sin stock” 61
Figura 7-17. Informe “Mazos sin stock” 61
Figura 7-14. Informe “Saturación de tipo de mesa por área” 62
Figura 7-19. Consulta “Saturación de tipo de mesa por área” 62
Figura 7-20. Informe “Histórico” 63
Figura 7-21. Consulta “Histórico” 63
Figura 7-22. Consulta “Aviones en fabricación” 64
Figura 7-23. Informe “Aviones en fabricación” 64
Figura 7-24. Formulario “Comerciales” 1 65
Figura 7-25. Formulario “Comerciales” 3 65
Figura 7-26. Formulario “Comerciales” 4 66
Figura 7-27. Menú “Controles” de formulario de navegación. 66
1 INTRODUCCIÓN
n este proyecto se abordará la construcción de una base de datos en Microsoft Access. Está basado en unas
prácticas que hizo el autor para la empresa “Airbus Defence And Space” en Sevilla en 2014.
El objetivo que esta base de datos perseguía era la centralización de la información, la mejora de la
consistencia y accesibilidad de la información, la mejora de la usabilidad de la interfaz, la seguridad y fiabilidad
del sistema y el uso de una tecnología basada en el software libre.
La empresa tenía un problema en el seguimiento de las piezas en el taller de montaje. Todos los manuales e
informes se hacían de manera manual mediante hojas de datos. Esto acarreaba pérdidas de datos a la hora del
cruce de la información. Por ello se pensó en la introducción de un nuevo método de recogida y tratamiento de
datos.
Figura 1-1. Ejemplo de hoja de datos.
Todos los días se tenían que actualizar todas las hojas de cálculo, y comprobar que los datos eran coherentes.
Esto suponía una tarea diaria y tediosa, perdiéndose aproximadamente 1 hora todos los días de productividad.
Nuestra BBDD permitirá tener un sistema de datos único y centralizado, con lo cual se suprimirán a corto plazo
el uso de hojas de cálculo. En un principio, nuestro sistema estará programado para permitir la entrada de datos
mediante archivos Excel además de por formularios. Se hizo así para que sirviera de puente para aquellas
personas que sólo sabían manejarse con hojas de datos.
E
Cada día sabemos más y entendemos menos
- Albert Einstein -
Introducción
2
ii
Para la introducción de datos en nuestra BBDD programaremos formularios. Estos tendrán los mismos campos
que las hojas de datos que queremos eliminar. Otra ventaja de este sistema es la posibilidad de comprobación
de los datos introducidos. Por ejemplo programaremos el campo “ITEM” para que sólo acepte campos
numéricos. El campo “Fecha_entrada” será programado para que sea un campo fecha anterior al valor fecha del
campo “Fecha_Salida”. Cada comercial tendrá acceso a un formulario similar al mostrado en la figura inferior.
Figura 1-2. Ejemplo de formulario de entrada de datos.
La base de datos será capaz de organizar el trabajo diario de las distintas áreas de fabricación, y proporcionar
informes sobre la situación del taller. Con estos informes control de producción podrá mejorar el funcionamiento
de la fábrica y optimizar su funcionamiento.
En definitiva, nuestro sistema será capaz de organizar el trabajo diario de las distintas áreas de fabricación, y
proporcionar informes para que control de producción pueda mejorar la productividad en un futuro.
En las siguientes líneas se expondrá de forma breve el funcionamiento de la empresa, desde la entrada de los
datos hasta la salida de los mazos fabricados.
Los comerciales eran agentes que se dedicaban a buscar recursos para la empresa. Se reunían con potenciales
clientes a los cuales pudiera interesarle la adquisición de aeronaves. Después de estas reuniones, responsables
de la empresa rellenaban archivos Excel donde aparecían todos los mazos a fabricar para cada avión conseguido.
Con todos los mazos a fabricar, control de producción hacía el planning de las distintas áreas de producción para
conseguir la entrega en la fecha indicada. Este planning se entregaba al responsable de cada área de fabricación,
que eran finalmente los que controlaban que la fabricación fuera acorde a los parámetros establecidos.
Cuando el operario terminaba la construcción de un mazo, este pasaba al área de pruebas. Había 3 tipos de
pruebas: pruebas EMI, pruebas eléctricas y pruebas de conectores. Dependiendo de la utilidad final del mazo,
este tendría que pasar 1, 2 o las 3 pruebas existentes. Para saber que pruebas debe de pasar un mazo concreto,
los operarios se apoyaban en un archivo Excel, “Part Master”, que contenía los parámetros de todos los mazos
a fabricar.
La hoja de datos “Part Master”, con los parámetros de producción de cada pieza, estaba editado por los
ingenieros de planta. Los ingenieros tenían en cuenta qué herramientas eran necesarias para fabricar cada mazo,
con lo cual definían el área de fabricación ideal para cada pieza. También incluían en el archivo las pruebas que
tenía que pasar cada pieza dependiendo de su uso final.
El problema radicaba en que se fabricaban miles de piezas, llevar el control de cada una de ellas era imposible.
Si una pieza se perdía o no tenía stock, control de producción no se enteraba, y la pieza podía quedarse estancada
días. Esto repercutía en un retraso de las entregas, pérdidas económicas y mala reputación para la empresa.
Para solventar este problema se propuso la creación de esta base de datos, con la cual, control de producción
tuviera una visión real y actualizada del estado del taller.
1.1 Decisiones técnicas
Por todo lo comentado en el apartado anterior, la elección de la solución tecnológica está condicionada al
software existente en la empresa. Para contener la base de datos y generar los documentos oportunos se opta por
el software de Microsoft Access. Como solución puente, conservaremos los archivos Excel, ya que algunos
usuarios finales no están familiarizados con el uso de Microsoft Access. Con la eliminación de las hojas de datos
se pretende tener un sistema con datos centralizados y únicos. Además con la inserción de datos mediante
formularios se puede comprobar el formato de los datos introducidos. Por ejemplo, comprobaremos que el
campo “ITEM” sea un campo numérico, o que el campo “Fecha_entrada” es anterior al campo “Fecha_salida”
Otra decisión importante es la elección del método de programación de Microsoft Access. En este sistema se
puede programar mediante macros o a través de código VBA. Vamos a usar en prácticamente la totalidad de la
base de datos el método de macros, aunque en algunos formularios usaremos código VBA. Esto es debido a que
las macros nos proporcionan un método más visual de programar. Además para una base de datos compartida
en un servidor de archivos prefiererimos evitar usar VBA por razones de seguridad. Tenemos un pequeño
manual de Visual Basic en el “Anexo 1”.
Introducción
4
iv
2 UTILIDAD PARA LA EMPRESA
omo se comentó en el apartado anterior, la implementación de la base de datos pretendía mejorar la
organización del trabajo en las distintas áreas. Debido a la gran cantidad de archivos Excel, la empresa
no tenía un control de la situación de cada pieza en el taller.
No sólo se pretendía tener un control más exhaustivo de la producción, si no que además nuestra base de datos
permitiría sacar informes que usarían en control de producción para mejorar la productividad. Por ejemplo,
podríamos observar que mazos están en el área de pruebas y ver si el área está saturada.
Figura 2-1. Informe “Pruebas”
Con estos informes, control de producción podría prever el colapso de un área de fabricación, y evitar esto
introduciendo trabajadores de otras áreas. Con otros informes podrían observar el tiempo que un área dedica a
la fabricación de una pieza. Si el tiempo es excesivo podrían preguntar a que es debido.
Por lo tanto, con la implantación de la base de datos se tendrá un control más claro de la situación de cada pieza,
y la empresa ahorrará dinero al aumentar la productividad.
También se pretendía en un futuro suprimir la utilización de los archivos Excel a la hora de recogida de datos.
Nuestra BBDD proporciona una solución puente, tiene un sistema de introducción de datos por medio de
formularios, además de introducción de datos mediante hojas de datos. Se tomo esta decisión para que los
usuarios tuvieran un tiempo de adaptación a Microsoft Access.
Con la creación de esta base de datos se perseguía la centralización de la información, la mejora de la
consistencia y accesibilidad de la información, la mejora de la usabilidad de la interfaz, la seguridad y fiabilidad
del sistema y el uso de un software que existiera ya en la empresa.
C
Utilidad para la empresa
6
vi
Microsoft Acceess cumplía todos estos requisitos, y además, permitía vincular hojas de datos a nuestra base de
datos de una forma fácil. Con este sistema de vinculación nuestra aplicación tendrá en todo momento una tabla
copia de los archivos Excel de entrada.
3 SISTEMAS DE GESTIÓN DE BASE DE DATOS
na base de datos es un conjunto de datos almacenados entre los que existen relaciones lógicas. Estos
sistemas son diseñados para satisfacacer satisfacer los requerimientos de información de una empresa u
organización. En una base de datos, además de los datos, también se almacena su descripción. La base
de datos funciona como un gran almacén de datos que se define una sola vez y que se utiliza al mismo tiempo
por muchos departamentos y usuarios. En lugar de trabajar con ficheros desconectados e información
redundante, por ejemplo usando hojas de cálculo, todos los datos se integran con una mínima cantidad de
duplicidad. La base de datos no pertenece a un departamento, se comparte por toda la organización. Dependiendo
del usuario final, este tendrá acceso a unos informes a otros. Además, la base de datos no sólo contiene los datos
de la organización, también almacena una descripción de dichos datos. Esta descripción es lo que se denomina
metadatos, catálogo y es lo que permite que exista independencia de datos lógica-física.
Con los sistemas de bases de datos se consigue separar la definición de los datos de los programas de aplicación.
Los usuarios del sistema sólo ven la la interfaz gráfica, en nuestro caso formularios e informes, y no se deben
preocupar de como se define internamente los datos. Una ventaja de este modelo, conocido como abstracción
de datos, es la posibilidad de cambiar la definición interna de un objeto sin afectar a sus usuarios ya que la
interfaz gráfica no se ve afectada. Del mismo modo, los sistemas de bases de datos separan la definición de
la estructura de los datos, de los programas de aplicación y almacenan esta definición en la base de datos. Si se
añaden nuevas estructuras de datos o se modifican las ya existentes, los programas de aplicación no se ven
afectados ya que no dependen directamente de aquello que se ha modificado.
Un sistema de gestión de bases de datos (SGBD) está formado por un conjunto de programas que permiten el
almacenamiento, modificación y extracción de la información en una base de datos, además de proporcionar
herramientas para añadir, borrar, modificar y analizar los datos. Los usuarios pueden acceder a la información
usando herramientas específicas de generación de informes, o bien mediante aplicaciones al efecto.
Generalmente se accede a los datos mediante lenguajes de alto nivel que simplifican la tarea de construir las
aplicaciones. Un SGBD permite controlar el acceso a los datos, asegurar su integridad, gestionar el acceso
concurrente a ellos, recuperar los datos tras un fallo del sistema y hacer copias de seguridad. Las bases de datos
y los sistemas para su gestión son esenciales para cualquier área de negocio.
3.1 Características de los gestores de bases de datos
El propósito general de los sistemas de gestión de bases de datos es el de manejar de manera clara, sencilla y
ordenada un conjunto de datos que posteriormente se convertirán en información relevante para una
organización.
Como ejemplos de gestores de bases de datos podemos nombrar: MySQL, PostgreSQL, Microsoft SQL Server,
Open Access, etc.
U
Sistemas de gestión de base de datos
8
viii
Las características principales de estos sistemas de gestión son:
Independencia: consiste en la capacidad de modificar el esquema (físico o lógico) de una base de datos sin tener
que realizar cambios en las aplicaciones que se sirven de ella.
Redundancia mínima: un buen diseño de una base de datos logrará evitar la aparición de información repetida o
redundante.
Consistencia: vigilar que aquella información que aparece repetida se actualice de forma coherente, es decir, que
todos los datos repetidos se actualicen de forma simultánea.
Seguridad: deben garantizar que esta información se encuentra asegurada frente a usuarios malintencionados.
Integridad: se trata de adoptar las medidas necesarias para garantizar la validez de los datos almacenados.
Respaldo y recuperación: deben proporcionar una forma eficiente de realizar copias de respaldo de la
información almacenada en ellos.
Control de la concurrencia: habitualmente son muchas las personas que acceden a una base de datos por lo que
ésta debe controlar este acceso concurrente a la información, que podría derivar en inconsistencias.
3.2 Ventajas e inconvenientes de los gestores de bases de datos.
Entre las ventajas de los gestores de bases de datos, se encuentran que:
1) Proveen facilidades para la manipulación de grandes volúmenes de datos
2) Simplifican la programación de equipos de consistencia.
3) Organizan los datos con un impacto mínimo en el código de los programas.
4) Disminuyen drásticamente los tiempos de desarrollo y aumentan la calidad del sistema desarrollado si son
bien explotados por los desarrolladores.
5) Usualmente, proveen interfaces y lenguajes de consulta que simplifican la recuperación de los datos.
Como inconvenientes de su uso destacan que:
1) Es necesario disponer de una o más personas que administren la base de datos, de la misma forma en que
suele ser necesario en instalaciones de cierto porte disponer de una o más personas que administren los sistemas
operativos. Esto puede llegar a incrementar los costos de operación en una empresa. Sin embargo hay que
balancear este aspecto con la calidad y confiabilidad del sistema que se obtiene.
2) Si se tienen muy pocos datos que son usados por un único usuario por vez y no hay que realizar consultas
complejas sobre los datos, entonces es posible que sea mejor usar una hoja de cálculo.
3) Complejidad: el software muy complejo y las personas que vayan a usarlo deben tener conocimiento de las
funcionalidades del mismo para poder aprovecharlo al máximo.
4) Tamaño: la complejidad y la gran cantidad de funciones hace que sea un software de gran tamaño que requiera
de una gran capacidad de memoria RAM.
5) Coste del hardware adicional: los requisitos de hardware para un SGBD por lo general son relativamente
altos, por lo que estos equipos pueden ser caros.
3.3 Microsoft Access
Microsoft Access es un sistema gestor de base de datos que pertenece a Microsoft Office. Microsoft Office es
una suite de oficina que abarca e interrelaciona aplicaciones de escritorio, servidores y servicios para los sistemas
operativos Microsoft Windows y Mac OS X. La primera versión de Office contenía Microsoft Word, Microsoft
Excel y Microsoft PowerPoint. Además, una versión profesional de Office incluía Microsoft Access y Schedule
Plus. Con el tiempo, las aplicaciones de Office han crecido sustancialmente y de forma más estrecha con
características compartidas, como un corrector ortográfico común, la integración de datos OLE y el lenguaje de
secuencias de comandos de Microsoft, Visual Basic para aplicaciones. Microsoft también posiciona Office como
una plataforma de desarrollo para software de línea de negocios, bajo la marca de Office Business Applications
(aplicaciones empresariales de Office u OBA por sus siglas en inglés).
Microsoft Access es un sistema gestor de bases de datos desarrollado por Microsoft y orientado a ser usado en
un entorno personal o en pequeñas organizaciones. Este sistema cumple con todas las características principales
de los gestores de bases de datos: independencia, redundancia mínima, consistencia, seguridad, integridad y
control de la concurrencia.
En Microsoft Access, la programación es el proceso de agregar funcionalidad a la base de datos mediante el uso
de macros de Access o código de Visual Basic para Aplicaciones (VBA). Por ejemplo, suponga que hemos
creado un formulario y un informe y deseamos agregar un botón de comando al formulario que, cuando se haga
clic en él, abra el informe. En este caso, la programación la podemos hacer mediante la creación de una macro
o un procedimiento de VBA.
Access permite crear ficheros de bases de datos relacionales que pueden ser fácilmente gestionadas por una
interfaz gráfica simple. Además, estas bases de datos pueden ser consultadas por otros programas. Este programa
permite manipular los datos en forma de tablas y crear relaciones entre tablas, consultas, formularios para
introducir datos e informes para presentar la información. La decisión de utilizar Microsoft Access se debe a las
siguientes razones:
1) Necesidad de importar y exportar datos en formato Excel. Este software permite crear tablas vinculadas
con archivos Excel. Con ello conseguíamos tener una copia exacta de todas las hojas de datos dentro de
nuestra base de datos.
2) Era un software que estaba ya instalado en la empresa. Esto ahorraba tiempo de instalación de otro
software.
3) Permite crear una interfaz de usuario fácil de usar mediante los llamados formularios de navegación.
Un formulario de navegación es, simplemente, un formulario que contiene un control de navegación
formado por botones y check que nos llevan a otros formularios, informes o consultas. Este tipo de
formularios constituye un enorme aliciente en cualquier base de datos, ya que es de uso intuitivo.
Sistemas de gestión de base de datos
10
x
Figura 3-1. Ejemplo de formulario de navegación Access.
Para trabajar en Microsoft Access usaremos un lenguaje de consulta estructurado o SQL (Structured Query
Language), y para programar su contenido dinámico usaremos Visual Basic (VBA) . SQL es un lenguaje de
acceso a bases de datos relacionales que permite especificar diversos tipos de operaciones en éstas. Entre sus
características principales destacan el manejo del álgebra y el cálculo relacional, permitiendo efectuar consultas
con el fin de recuperar información de interés de la base de datos, así como también hacer cambios sobre ella.
A continuación mostraremos algunas de las sentencias más utilizadas en nuestro sistema, acompañadas de un
ejemplo básico:
• Update: modifica datos existentes en una tabla de la base de datos.
• Delete: suprime filas de una tabla.
• Insert: añade nuevas filas de datos a una tabla la base de datos.
• Select: selecciona filas de la tabla indicada.
Los orígenes del SQL están ligados a los de las bases de datos relacionales. En 1970 E. F. Codd propone
el modelo relacional y asociado a este un lenguaje primitivo de acceso a datos. Basándose en estas ideas, los
laboratorios de IBM definieron el lenguaje SEQUEL (Structured English Query Language) que más tarde fue
implementado por el sistema de gestión de bases de datos (SGBD) experimental System R, desarrollado en 1977
también por IBM. Sin embargo, fue Oracle quien lo introdujo por primera vez en 1979 en un producto comercial.
El SEQUEL terminó siendo el predecesor de SQL, que es una versión evolucionada del primero. El SQL pasa
a ser el lenguaje por excelencia de los diversos sistemas de gestión de bases de datos relacionales surgidos en
los años siguientes y fue por fin estandarizado en 1986 por el ANSI, dando lugar a la primera versión estándar de
este lenguaje. Al año siguiente este estándar es también adoptado por la ISO.
Sin embargo, este primer estándar no cubría todas las necesidades de los desarrolladores e incluía
funcionalidades de definición de almacenamiento que se consideró suprimirlas. Así que, en 1992, se lanzó un
nuevo estándar ampliado y revisado del SQL llamado "SQL-92". En la actualidad el SQL es el estándar de la
inmensa mayoría de los SGBD comerciales.
Visual Basic (VBA) es el lenguaje de programación desarrollado por Microsoft para crear contenido dinámico
en las aplicaciones de Microsoft Office. Microsoft Access es el programa de base de datos dentro del paquete
de Microsoft Office que utiliza SQL y VBA para administrar datos y proporcionar la automatización de las
funciones sistemáticas de base de datos. VBA permite a los programadores ampliar la funcionalidad de
programas como Excel y Access. A continuación mostramos un ejemplo de un cógido VBA.
Sistemas de gestión de base de datos
12
xii
Explicaremos que hace cada sentencia del código anterior:
a) Dim bd As Database : Sirve para declarar una base de datos.
b) Dim tau As TableDef : Declaramos una tabla.
c) Dim cam As Field : Declaramos un campo .
d) Set bd = CreateDataBase(): Creamos una base de datos de nombre bd.
e) Set tau = bd.CreateTableDef(): Creamos en la base de datos bd una tabla.
f) Set cam = tau.CreateField(): Sirve para crear un campo en una base de datos.
Para obtener más información acerca del código tenemos un manual de Visual Basic en el “Anexo 1”.
4 FUNCIONAMIENTO DEL TALLER
ara entender nuestra base de datos debemos comprender en que consiste el trabajo en la fábrica de Airbus.
En primer lugar, los comerciales se dedicaban a buscar recursos para la empresa. Se reunían con
potenciales clientes a los cuales pudiera interesarle la adquisición de aeronaves. Después de estas reuniones,
responsables de la empresa rellenaban archivos Excel donde aparecían todos los mazos a fabricar para cada
avión conseguido. Había un archivo Excel por cada comercial, lo que producía un descontrol a la hora de hacer
la planificación de los mazos. Los comerciales se comprometían con los clientes en una fecha y siempre querían
que sus mazos a fabricar fueran los primeros. Para paliar este descontrol se propuso tener un solo archivo Excel
para todos los comerciales. Con todos los mazos a fabricar, control de producción hacía la planificación de las
distintas áreas de producción para conseguir la entrega en la fecha indicada.
Figura 4-1. Ejemplo hoja de cálculo de comerciales.
La planificación se entregaba al responsable de cada área de fabricación, que eran finalmente los que controlaban
que la fabricación fuera acorde a los parámetros establecidos. Cada responsable de área trabajaba con su hoja de
cálculo. Cada vez que desde control de producción se intentaba averiguar como iba la construcción de un mazo
se perdía gran cantidad de tiempo. Se perdía capacidad de producción en las áreas de fabricación, ya que a los
responsables de montaje se les olvidaba editar los Excel. Los operarios de pruebas no sabían que mazos estaban
terminados, y control de producción no era consciente de en que estado estaba el mazo.
El trabajo en el taller consistía en la fabricación de mazos. Un mazo es un conjunto de cables, conectores y
paneles. Había muchos tipos de mazos que se pueden fabricar, cada uno de ellos tiene un Part Number (P/N).
Este Part Number no es un distintivo absoluto, ya que podemos fabricar las veces que queramos ese mazo.
Los operarios del almacen tenían el control sobre los encargos de los cables sin stock. Para ello tenían un archivo
Excel donde se encontraban el identificador de todos los cables usados en el taller junto con el identificador de
sus proveedores. El encargado del almacén todos los días comprobaba los encargos de la semana, si observaba
que podía faltar algún cable se hacía un encargo.
P
Funcionamiento del taller
14
xiv
Figura 4-2. Ejemplo de hoja de cálculo”Proveedores_Cables”
Normalmente los encargos se hacían los lunes, ya que la planificación de los mazos a fabricar se hacía a
principios de semana. Si observaban que había muchos tipos de mazos iguales a fabricar, buscaban en otro Excel
que cables usaba ese mazo. Cada cable que se fabricaba llevaba unos conectores asociados, los operarios del
almacén se dedicaban a recopilar los conectores necesarios y llevarlos al área de fabricación. Para estos
conectores siempre tenían stock, ya que la empresa hacía un encargo una vez al año para la fabricación anual.
Figura 4-3. Ejemplo de hoja de cálculo”Cableado”
Por otra parte estaban los ingenieros de planta. Estos ingenieros se dedicaban a controlar los parámetros de
fabricación de todos los tipos de mazos. Hacían reuniones todos los lunes y proponían mejoras para la
producción de todas las piezas del taller. Estos ingenieros trabajaban con un archivo Excel llamado “Part
Master”. La hoja de datos contenía todos los tipos de mazos que se podían fabricar, y los distintos parámetros
de montaje. Este archivo contiene para cada tipo de mazo, las pruebas que tiene que pasar una vez montado, la
longitud del mazo en metros, el área de fabricación y los pulsos para su construcción.
Figura 4-4. Ejemplo de registros en el “Part Master”
El taller contaba con 3 áreas de fabricación. El “Part Master” nos definía en cual de las 3 áreas de fabricación se
construirá definitivamente cada mazo. Esta decisión se tomaba en base a las herramientas necesarias para la
construcción de cada pieza concreta. Cada área estaba dirigida por un responsable que seguía la ejecución
correcta de todos los mazos de su área, además, apuntaba en hojas de datos todos los mazos que se fabricaban y
diversos parámetros de fabricación.
Dentro de cada área de fabricación había 3 tipos de mesa. Cada tipo de mesa tenía una longitud específica.
Dependiendo de la longitud del mazo, este pasa por una mesa de fabricación u otra. A continuación mostramos
una tabla con las distintas mesas de fabricación. Todas las áreas tenían los 3 tipos de mesas distintos.
Tabla 4–1. Tipos de mesas de fabricación.
Tipo de Mesa Longitud Cables
Tipo_A < 3 metros
Tipo_B < 5 metros
Tipo_C > 5 metros
El tiempo en el que un mazo tiene que ser fabricado se divide en pulsos. Un pulso equivale a 4 horas de trabajo,
por lo tanto, un trabajador al día produce 2 pulsos. El responsable podrá acceder al formulario de planificación
de su área, en este formulario tendrá 2 campos editables: Pulsos Consumidos y Motivo Parada.
El primero de ellos lo actualizará 2 veces al día y servirá para controlar el tiempo de fabricación del mazo.
Cuando el mazo haya alcanzado los pulsos establecidos en el “Part Master” para su fabricación, este pasará a la
sección de pruebas. El campo “Motivo Parada” sirve para que los responsables puedan avisar a control de
producción que un mazo ha quedado parado e indicar el motivo.
Cuando el mazo es fabricado pasa al área de pruebas. En esta área los trabajadores accedían a la hoja de datos
“Part Master” para saber qué tipo de pruebas tenía que pasar cada mazo concreto. Se podían realizar 3 tipos de
pruebas distintas dependiendo de la finalidad del mazo: pruebas de apantallamiento contra EMI, pruebas de
temperatura y la pruebas de conectores. Cuando finalizaban las pruebas de un mazo lo apuntaban en un Excel.
Si el mazo no pasaba las pruebas era fabricado de nuevo
Figura 4-5. Ejemplo de hoja de cálculo “Pruebas”
Funcionamiento del taller
16
xvi
Las pruebas que se llevaban a cabo en el taller eran:
1) Pruebas de apantallamiento contra EMI: los operarios comprobaban que el mazo estaba debidamente
apantallado y que funcionaba correctamente en condiciones de emisiones electromagnéticas extremas.
2) Pruebas de temperatura: algunos mazos tenían que pasar pruebas de temperatura debido a que se
posicionaban en un área del avión crítica. Por ejemplo los mazos que actuaban sobre los motores tenían
que pasar estas pruebas.
3) Pruebas de conectores: era una prueba de continuidad eléctrica. Conectaban los mazos en un entorno
simulado y comprobaban que no hubiera algún defecto en la fabricación del mazo.
El responsable del área de pruebas rellenaba otro Excel con los mazos que pasaban las pruebas, y ordenaba la
creación de los mazos que no las superaban. Cuando el mazo había pasado las pruebas correspondientes era
empaquetado y enviado al área de montaje.
5 BÚSQUEDA DE DEPENDENCIAS FUNCIONALES
5.1 Búsqueda del diagrama E-R
El punto de partida lógico para obtener una base de datos coherente será buscar las entidades relacionales. En la
siguiente figura se muestra el diagrama E-R que se obtuvo para nuestra BBDD.
Figura 5-1. Árbol entidad-relación
Búsqueda de dependencias funcionales
18
xviii
5.2 Cumplimiento de las formas normales
Otra parte importante de la creación de nuestra base de datos fue la comprobación de que cumplía las formas
normales. En este apartado revisaremos las 3 formas normales más esenciales.
5.2.1 Primera forma normal
Una relación está en la primera forma normal si los dominios en los que se definen los atributos son escalares.
En la comprobación de esta norma encontramos los siguientes problemas:
A) Fechas: El sistema usa las fechas exclusivamente como valor individual, por lo tanto será escalar. En nuestra
base de datos usaremos fechas “enteras”, es decir, no usaremos valores de día, mes y año por separado.
B) Códigos: Hay empresas que usan valores de referencia que son la suma de varios campos. Nuestra base de
datos no tiene este tipo de campos ya que incumplen la primera forma normal.
5.2.2 Segunda forma normal
Una relación está en la segunda forma normal, si está en la primera, y además, todos sus atributos dependen de
la clave candidata completa. Esta forma trata de no representar dos entidades distintas en una única relación.
Por ejemplo, cometeríamos un error de forma si pusiéramos en la misma relación Mazos y Proveedores, ya que
no hay una relación directa.
Figura 5-2. Ejemplo de fallo en segunda forma normal.
5.2.3 Tercera forma normal
Una relación está en la tercera forma normal, si está en la segunda, y además, no hay dependencias funcionales
transitivas. Lo que se consigue cumpliendo esta norma es no tener información redundante.
5.3 Reducción de dependencias funcionales
5.3.1 Descripción de las entidades y atributos.
Para definir las dependencias funcionales, en primer lugar vamos a describir cada entidad y atributos existentes.
Le asignaremos una letra para referirnos a cada una más adelante.
A) ITEM: Número único que identifica un mazo concreto en la cadena de montaje
B) P/N: Código que identifica el tipo de mazo que se quiere fabricar
C) Comercial: Identifica al que pertenece el comercial que pide el mazo
D) Id_Avión: Identifica el avión para el cual va destinado el mazo.
F) Pasa_P1: Nos indica un mazo concreto pasó la prueba 1.
G) Pasa_P2: Nos indica un mazo concreto pasó la prueba 2.
H) Pasa_P3: Nos indica un mazo concreto pasó la prueba 3.
I) Fecha_Entrada: Nos indica cuando se solicitó un mazo concreto.
J) Fecha_Salida: Indica el día que el mazo tiene que estar listo.
K) Pulsos_Consumidos: Indica los pulsos que lleva en fabricación un mazo.
L) Motivo_Parada: Indica el motivo de la parada de fabricación de un mazo.
M) Área_de_Fabricación: Define el área donde se fabrica el mazo.
N) Pasar_P1: Nos indica si el tipo de mazo tiene que pasar la prueba 1.
O) Pasar_P2: Nos indica si el tipo de mazo tiene que pasar la prueba 2.
P) Pasar_P3: Nos indica si el tipo de mazo tiene que pasar la prueba 3.
Q) Longitud: Indica la longitud de un tipo de mazo
R) En_Fabricación: Indica si un mazo ha entrado en el proceso de fabricación.
S) Id_Cable: Indica el tipo de cable dentro del almacén.
T) Id_Proveedor: Nos indican los proveedores de un cable.
U) Longitud_Stock: Define la cantidad de un tipo de cable que hay en stock en el almacén.
V) Tipo_Mesa: Indica que mesa está asignada a la fabricación de un mazo.
X) Tlf_Provedor: Teléfono proveedor
Y) Conectores: Atributo de los cables. Identifica el tipo de conectores para cada Id_Cable.
Z) Motivo_Parada_P1: Atributo que nos indica el motivo por el cual está parada la prueba 1.
AA) Motivo_Parada_P2: Atributo que nos indica el motivo por el cual está parada la prueba 2.
AB) Motivo_Parada_P3: Atributo que nos indica el motivo por el cual está parada la prueba 3.
Búsqueda de dependencias funcionales
20
xx
5.3.2 Esquema de relaciones
Un esquema de relaciones es una estructura abstracta que define una relación a través de un nombre, un conjunto
de atributos y un conjunto de restricciones que caracterizan a esa relación.
Seguiremos la notación: r=R(T,L), donde:
R es el nombre de la relación r.
T es el conjunto de atributos que definen a R. T=(T1,T2,T3)
L es el conjunto de restricciones que la caracterizan: L= (L1,L2,L3)
Aplicadas a nuestra base de datos obtenemos:
a) Mazo_Concreto (ITEM, Comercial, Id_Avión, En_Fabricación, Pulsos_Consumidos, Motivo_Parada
Fecha_Entrada, Fecha_Salida, Pasa_P1, Pasa_P2, Pasa_P3, Motivo_Parada_P1, Motivo_Parada_P2,
Motivo_Parada_P3)
L1 = ITEM (Comercial, Id_Avión, En_Fabricación, Pulsos_Consumidos, Motivo_Parada
Fecha_Entrada, Fecha_Salida, Pasa_P1, Pasa_P2, Pasa_P3)
b) Es_de_tipo (ITEM, P/N)
ÍTEM será la clave externa para la entidad “Mazo_Concreto”.
P/N será la clave externa para la entidad “Tipo_Mazo”.
c) Tipo_Mazo (P/N, Área_Fabricación, Tipo_mesa, Fecha_Entrada, Fecha_Salida, Pulsos_Necesarios,
Longitud, Id_Avión, Pasar_P1, Pasar_P2, Pasar_P3)
L1= P/N (Área_Fabricación, Tipo_mesa, Fecha_Entrada, Fecha_Salida, Pulsos_Necesarios, Longitud,
Id_Avión, Pasar_P1, Pasar_P2, Pasar_P3)
d) Contiene ( P/N, Id_Cable )
P/N será la clave externa para la entidad “Mazo_Concreto”.
Id_Cable será la clave externa para la entidad “Cables”.
e) Cables ( Id_Cable, Longitud_Stock, Conectores )
L1= Id_Cable (Longitud_Stock, Conectores)
f) Suministra ( Id_Proveedor, Id_Cable )
Id_Proveedor será la clave externa para la entidad “Cables”.
Id_Cable será la clave externa para la entidad “Proveedor”.
g) Proveedor ( Id_Proveedor, Teléfono, Dirrección; Nombre_Proveedor )
L1= Id_Proveedor (Nombre_Proveedor, Telefono, Dirrección)
5.3.3 Asignación de relaciones
Con las entidades y atributos bien definidos pasamos a la asignación de las relaciones.
A, C, D, F, G, H, I, J, L,R,V, Z, AA, AB: Si sabemos el ITEM podremos saber: (Comercial, Id_Avión,
En_Fabricación, Pulsos_Consumidos, Motivo_Parada Fecha_Entrada, Fecha_Salida, Pasa_P1, Pasa_P2,
Pasa_P3, Tipo_Mesa, Motivo_Parada_P1, Motivo_Parada_P2, Motivo_Parada_P3)
BN, O, P, Q, K, M : Sabiendo el P/N de un mazo, sabremos: ( Área_Fabricación, Tipo_mesa, Fecha_Entrada,
Fecha_Salida, Pulsos_Necesarios, Longitud, Id_Avión, Pasar_P1, Pasar_P2, Pasar_P3)
AB: Con el ITEM, sabremos su P/N.
BS: Con el P/N conoceremos su Id_Cable asociados.
SQ, Y: Sabiendo el Id_cable podremos sacar Longitud_Stock y sus conectores.
TS : Sabiendo el Id_proveedor podemos conocer los cables que suministra.
T X : Id_proveedor define el teléfono del proveedor.
Finalmente nos quedaría para nuestra base de datos.
F(A C, D, F, G, H, I, J, L ,V, Z, AA, AB BN, O, P, Q, K, M AB BS SQ TS T X)
5.3.4 Reducción de relaciones
Sea un conjunto de dependencias funcionales F, podemos hallar el cierre de F, denominado F+. El cierre de F
es el conjunto de todas las dependencias funcionales implicadas lógicamente en F.
Dado F, se puede calcular F+ a partir de la definición formal de dependencia funcional.
Para poder reducir correctamente F aplicaremos las 3 reglas o axiomas de Armstrong, en honor a la persona que
la propuso por primera vez. Estas reglas son:
h) Regla de la reflexividad: Si α es un conjunto de atributos y β contiene a α, entonces se cumple que α
β
i) Regla de la aumentatividad: Si se cumple que α β, y Ω , es un conjunto de atributos, entonces de
cumple: Ω α Ω β
j) Regla de la transitividad: Si se cumple que α β, y también se cumple que βµ, entonces se cumple
que α µ
Los axiomas de Armstrong son correctos porque no generan dependencias funcionales incorrectas. También son
completos porque dada cualquier conjunto de dependencias funcionales F puede hallar F*.
Debido a la complejidad de implementar estas reglas en nuestra F, también usaremos reglas simplificadas. Con
estas reglas se hallaría también F* de una forma más fácil:
Búsqueda de dependencias funcionales
22
xxii
k) Regla de la unión: Si α β y α Ω, entonces α βΩ
l) Regla de la descomposición: Si se cumple que α βΩ, entonces de cumple: α β y α Ω.
m) Regla de la pseudotransitividad: Si se cumple que α β y πβµ, entonces se cumple que πα µ.
Partiendo de las relaciones definidas en el apartado anterior, vamos a proceder a reducirlas con los métodos
estudiados.
F(A C, D, F, G, H, I, J, L ,V, Z, AA, AB BN, O, P, Q, K, M AB BS SQ TS T X)
Partimos con la primera relación: (A C, D, F, G, H, I, J, L,V ) y (AB)
Con la regla de la unión se nos quedará: A C, D, F, G, H, I, J, L,V, B
Podría parecer que con las dos últimas relaciones pudiésemos hacer la misma reducción. Pero no es posible
reducirlas, ya que como vemos en el diagrama E-R, la relación es de (M : N).
Aplicamos las reglas a las demás relaciones y no podemos reducirlas. Por lo tanto nuestra F definitiva será:
F(A C, D, F, G, H, I, J, L BN, O, P, Q, K, M BH HJ TX )
Estas relaciones darán lugar a 5 tablas que serán representadas en el siguiente apartado.
5.4 Creación de las tablas
A partir de las dependencias funcionales podremos sacar las tablas que constituirán nuestra base de datos. A
continuación mostraremos cuáles son esas tablas.
a) Tablas Mazo_Concreto_Tipo: Tendrá por clave principal el campo ITEM. Es una tabla extensa en
cuanto a campos. Además tendrá campos editables por los responsables de cada área como son
“Motivos_Parada” , “Pulsos_Consumidos y pruebas pasadas.
Tabla 5–1. Tabla Mazo_Concreto_Tipo.
Item Programa … Id_Avión P/N En_Fabricación
100001 Civil … 00010 35-61119-0012 Si
100002 Civil … 00010 35-61119-0013 Si
El ITEM identificará de forma univoca un registro dentro de la base de datos.
L1= ITEM (P/N, Comercial, Id_Avión, En_Fabricación, Pulsos_Consumidos, Motivo_Parada
Fecha_Entrada, Fecha_Salida, Pasa_P1, Pasa_P2, Pasa_P3, Área_Fabricación, Tipo_mesa,
Fecha_Entrada, Fecha_Salida, Pulsos_Necesarios, Longitud, Pasar_P1, Pasar_P2, Pasar_P3)
b) Mazo_tipo: Tendrá por clave principal el campo P/N. En nuestra base de datos coincidirá con el archivo
Excel vinulado “Part Master”. Contendrá los parámetros de fabricación necesarios para todos los mazos
catalogados en el sistema.
L1= P/N (Área_fabricación, Pulsos, Pasar_Prueba_conectores, Pasar_Prueba_temperatura,
Pasar_Prueba_EMI, Longitud, Tipo_mesa,)
Tabla 5–2. Tabla Mazo_tipo
P/N Área_Fabricación … Pulsos Tipo_mesa
35-61119-0012 Baja … 2 A
35-61119-0013 Media … 3 C
c) Tabla Cables: Tendremos una tabla que nos indicará por cada Id_Cable, su Longitud_Stock, conectores
y grosor.
L1= Id_Cable Longitud_Stock, Conectores, grosor.
Tabla 5–3. Tabla Cables
d) Tabla Contiene: En esta tabla estarán reflejados los cables que contiene cada mazo a fabricar.
Tabla 5–4. Tabla Contiene.
P/N Id_Cables
35-61119-0001 100000
35-61119-0001 100048
Id_Cable Conectores Loguitud_ Stock Grosor
100000 A1223 100 10
100001 B4354 223 10
100002 B2333 70 20
Búsqueda de dependencias funcionales
24
xxiv
e) Tabla Suministra: Tendremos una tabla que relacionara los cables con sus proveedores. Tendrá 2 claves
primarias.
Tabla 5–5 Tabla Suministra.
f) Tabla Provedores: Relaciona el identificador de los proveedores con su teléfono, dirección y nombre de
la empresa.
Tabla 5-6. Tabla Proveedores
Id_Proveedores Id_Cables
AM483 100000
AM483 100001
AM484 100000
Id_Proveedor Empresa Dirección Teléfono
SE120 Ainco S.L
C/Juan Marcos 23
(Sevilla)
954545454
MA221 Bequinsa S.A
C/ España 1
(Madrid)
901123922
BC400 Electrogas S.L
C/Joan Marc 2
(Barcelona)
902123949
6 DESARROLLO DE LA BASE DE DATOS
6.1 Vinculación de los archivos excel de entrada
El primer paso para la creación de nuestra base de datos será la vinculación de las hojas de datos de entrada.
Como comentamos en apartados anteriores, Access nos permite una integración rápida de las hojas de cálculo.
Selecionando la opción vinculación, tendremos una copia del archivo excel en nuestra base de datos. Cuando se
vincula a una hoja de cálculo de Excel, Access crea una nueva tabla que está vinculada a las celdas de origen.
Cualquier cambio que realice en las celdas de origen en Excel aparece en la tabla vinculada. No obstante, no
puede editar el contenido de la tabla correspondiente en Access. Si desea agregar, editar o eliminar datos, debe
realizar los cambios en el archivo de origen. Esta es la major opción para tener actualizado nuestro sistema
cuando tenemos entradas desde hojas de cálculo.
6.1.1 Pasos para la vinculación
Para crear la vinculación seguiremos unos pasos muy sencillos que mostraremos a continuación.
En el menú principal de nuestro sistema seleccionaremos la opción “Datos Externos”. Se nos abrirá un menú de
opciones, entre todas las posiblidades escogeremos “Importar Excel a Access”.
Figura 6-1. Vinculación Excel 1
Desarrollo de la base de datos
26
xxvi
Se nos abrirá una nueva pestaña, seleccionaremos la opción vincular. Copiaremos la ruta donde está nuestro
archivo Excel y pulsaremos el botón “Siguiente”.
Figura 6-2. Vinculación Excel 2
Se nos abrirá una nueva pestaña, en la cual, aparecerán los datos del archivo origen y la opción “Primera fila
contiene encabezados de columna”. Seleccionaremos esta opción para que nuestra tabla vinculada tenga como
nombres de campo la primera fila del archivo origen. Es importante seleccionar esta opción ya que en su defecto
no podremos operar con la tabla vinculada.
Figura 6-3. Vinculación Excel 3
Una vez realizadas estos pasos, sólo nos quedaría ponerle nombre a nuestra tabla vinculada. Realizaremos esta
opción con los 6 archivos excel que queremos vincular.
Existiría la opción de “Importar” los archivos excel, pero no se actualizaría nuestras tablas internas cuando las
hojas de cálculos fueran editadas. Con la opción de vinculación podremos hacer que nuestra BBDD tenga como
entradas las hojas de datos, lo cual nos proporcionará 2 sistemas para la introducción de datos de entrada: ficheros
Excel y Formularios.
En un futuro, esta opción se eliminaría y sólo se admitirán nuevos registros mediante la edición de formularios.
6.2 Creación de las tablas
Nuestra base de datos contendrá 6 tablas las cuales contendrá toda la información necesaria de nuestro sistema.
Para la creación de cada una de las tablas seguiremos los pasos comentados a continuación.
En el menú principal de nuestro sistema seleccionaremos la opción “Crear”. Se nos abrirá un menú de opciones,
entre todas las posiblidades escogeremos “Diseño Tabla”. Habría otra posibilidad que sería escoger la opción
“Tabla”, pero esta alternativa nos abriría una nueva tabla en modo “Hoja de datos”. Este modo serviría para
meter datos directamente en una tabla creada por Access por defecto. Como nosotros queremos una tabla con
unos nombres de campos concretos la mejor opción será escoger “Diseño Tabla”.
Figura 6-4. Creación de tablas
Se nos abrirá una pestaña con 3 campos: “Nombre de campo”, “Tipo de datos” y “Descripción”. En el “Nombre
de campo” podremos los nombres de los campos de nuestra tabla a crear. En “Tipo de datos” pondremos el tipo
de datos que contendrá el campo creado. Es importante definir bien el tipo de datos de cada campo para evitar
fallos en nuestro sistema. Por último seleccionaremos el campo ITEM como clave primaria de la tabla, esto se
hará haciendo doble clic en el campo en cuestión y pulsando “Agregar clave primaria”. Al guardar, cambiaremos
el nombre por defecto de la tabla.
Seguiremos este procedimiento para crear cada una de las tablas indicadas en el apartado anterior.
Desarrollo de la base de datos
28
xxviii
6.3 Relaciones entre tablas
Para que los datos de nuestro sistema se puedan seleccionar, encontrar y procesar de forma rápida y eficaz, es
necesario que las tablas estén relacionadas mediante claves externas. Las tablas tienen que estar relacionadas
con otras formando estructuras relacionales. La relación es una asociación establecida entre campos comunes
(claves externas) en dos tablas. Los campos que entran en relación pueden llamarse de distinta manera, pero
tienen que ser del mismo tipo de datos: númerico, texto, fecha, etc. La relación permite al motor de Acces,
encontrar datos relacionados en ambas tablas.
Para que nuestra base de datos funcione correctamente debemos definir las relaciones entre las tablas existentes.
Hemos programado el sistema para que las tablas relacionen mediante sus claves primarias y foráneas. Algunas
tablas coinciden directamente con los Excel vinculados (Contine, Suministra, Cableado, Proveedor), pero la
tabla “Mazos_conc_tipo” se crea mediante la anexión de los datos del excel de entranda
“Comerciales_vinculado” y la actualización desde la tabla vinculada “Part Master”. Es por esta razón que en el
esquema de relaciones aparece como si hubiera 7 tablas, pero realmente serían 5 tablas funcionales (Contine,
Suministra, Cableado, Proveedor y Mazo_conc_tipo)
Figura 6-5. Esquema de relaciones.
6.3.1 Creación del esquema de relaciones
Para crear el esquema de relaciones en nuestro sistema necesitamos primero haber creado todas las tablas que
existirán en nuestra BBDD. En el menú principal de nuestro sistema seleccionaremos la opción “Herramientas
de base de datos”. Se nos abrirá un menú de opciones, entre todas las posiblidades escogeremos “Relaciones”.
Figura 6-6. Creación del esquema de relaciones 1.
Se nos abrirá una pestaña en gris con todas las tablas definidas en nuestro sistema. Haciendo clic en cada una de
las tablas podremos definir con que tablas está relacionadas y de que modo. Podremos, por ejemplo, exigir
integridad referencial y eliminar en cascada.
La integridad referencial es un sistema de reglas que utiliza Access para asegurarse que las relaciones entre
registros de tablas relacionadas son válidas y que no se borren o cambien datos relacionados de forma accidental.
Al exigir integridad referencial en una relación le estamos diciendo a Access que no nos deje introducir datos
en la tabla secundaria si previamente no se ha introducido el registro relacionado en la tabla principal.
Por ejemplo: Tenemos la tabla “Mazo_conc_tipo” y la tabla de “Contiene”, en la tabla “Mazo_conc_tipo” tengo
el campo P/N que me indica el tipo de mazo, las dos tablas deberían estar relacionadas por ese campo, en esta
relación de tipo uno a varios la tabla “Mazo_conc_tipo” es la tabla principal y la tabla “Contiene” la secundaria
(un mazo esta formado por varios cables). Si marcamos la casilla “Integridad Referencial”, no nos dejaría
asignar un cable a un P/N que no exista en la tabla “Mazo_conc_tipo”.
Si escogemos la opción “Integridad Referencial”, podremos seleccionar “Eliminar en cascada” y “actualizar en
cascada.
a) Actualizar en cascada los campos relacionados: Hace que cuando se cambie el valor del campo de la
tabla principal, automáticamente cambiarán los valores de sus registros relacionados en la tabla
secundaria.
b) Eliminar en cascada los registros relacionados: Cuando se elimina un registro de la tabla principal se
borrarán también los registros relacionados en la tabla secundaria.
Por ejemplo: Si borrásemos un tipo de mazo de la cadena de producción (“Part Master”),
automáticamente se borraría el registro que relacionan los Id_cables con el P/N borrado (“Contiene”)
Hemos seleccionado integridad referencial y eliminación en cascada entre las tablas “Proveedor” y
“Suministra”. Con ello conseguimos que si un proveedor deja de abastecer a la empresa, borrando el registro de
la tabla “Proveedor”, automáticamente se borrarían los registros con su Id_proveedor de la tabla “Suministra”.
Desarrollo de la base de datos
30
xxx
6.4 Formularios de navegación
Los formularios constituyen una herramienta para la entrada y presentación de datos en Microsoft Access.
Existen dos tipos importantes de formularios: formularios de navegación y formularios para entrada de datos.
En este apartado nos centraremos en los formularios de navegación. Estos constan de dos elementos principales:
la ventana donde se nos presentará el formulario y los controles. Toda la información del formulario está
contenida en controles. Los controles son objetos del formulario que muestran datos, realizan acciones o
decoran el formulario. Estos controles serán definidos con más detalle en el apartado siguiente.
A continuación describiremos los pasos a seguir para la creación de un formulario de navegación. El formulario
de navegación es una interfaz gráfica que permite al usuario final accede facilmente a tablas, informes y
consultas de la base de datos.
Para crear estos formularios, en el menú principal seleccionaremos la opción “Crear”. Se nos abrirá un menú de
opciones, entre todas las posiblidades escogeremos “Formulario en Blanco”.
Figura 6-7. Creación de los formularios de navegación 1.
Nos aparecerá una pestaña en gris. En la parte superior de la pantalla nos aparecerá el menú “controles”.
Haciendo clic en cada uno de sus elementos podremos incluir en nuestro formulario texto, hipervínculos o
botones a los cuales añadir macros o códigos. En el apartado siguiente describiremos con más detalle todo lo
relacionado con los controles.
Figura 6-8. Menú “Controles” de formulario de navegación.
Figura 6-9. Ejemplo de formulario de navegación.
Por ejemplo haciendo clic en el control “Aa” podremos añadir texto a nuestro formulario de entrada. Podemos
añadir botones seleccionando el 4º elemento del menú “Controles”. El logotipo de Airbus lo hemos introducido
mediante el método de inserción de imágenes que sería el 7º elemento del menú “Controles”.
Una vez insertado el botón le cambiaremos el nombre y lo podemos programar para que ejecute un código en
VBA o una macro que contenga varias consultas creadas en nuestra BBDD. En nuestro sistema nos hemos
decidido por que los botones ejecuten macros ya que es un método más visual y directo que el código VBA.
Para programar un botón lo seleccionamos con el botón secundario del ratón y le damos a “Propiedades”. En
esta pestaña le asignamos al recuadro “Al hacer click” una macro que hayamos creado previamente.
Figura 6-10. Programación de botones.
Como observamos en la imagen podríamos haber programado el botón para que hiciese algo al recibir enfoque
o al hacer doble clic sobre él.
Desarrollo de la base de datos
32
xxxii
6.4.1 Controles para el formulario navegación
Como mencionamos en el apartado anterior, los formularios de navegación constan de dos elementos
principales: la ventana donde se nos presentará el formulario y los controles. Toda la información del formulario
está contenida en controles. Los controles son objetos del formulario que muestran datos, realizan acciones o
decoran el formulario.
Algunos controles dependen de campos existentes en una tabla o consulta, permitiendo ver los datos de dichos
campos. Por ejemplo, se pueden introducir y mostrar datos utilizando cuadros de texto, cuadros de lista, botones
de opción, etc. Para mostrar imágenes utilizaremos marcos de objetos.
Otros controles muestran información que sólo está almacenada en el diseño del formulario. Por ejemplo, las
etiquetas se utilizan para mostrar textos descriptivos, y las líneas y rectángulos, para organizar los datos y añadir
una interfaz visual más atractiva al formulario.
Cuando agregamos un control a un formulario debemos decidir de dónde obtiene dicho control la información
que va a mostrar. Tenemos tres tipos de controles:
a) Dependientes. Su origen de datos es un campo de la tabla o consulta subyacente. Se utilizan para
mostrar, introducir y actualizar los valores de los campos de la base de datos.
b) Independientes. No tienen ningún origen de datos. Se utilizan para mostrar información, líneas,
rectángulos e imágenes. Por ejemplo, una etiqueta que muestra el título de un formulario o el nombre
de un campo es un control independiente.
c) Calculados. Su origen de datos es una expresión. Una expresión es una combinación de operadores,
nombres de controles, nombres de campos, funciones y constantes.
Para crear un control de cuadro de texto dependiente de un campo podemos hacerlo de dos maneras:
a) Arrastrando el campo que se desee desde la lista de campos hasta el formulario. En este caso se creará
un control de cuadro de texto dependiente del campo seleccionado. Un cuadro de texto dependiente
tiene una etiqueta adjunta que toma como título predeterminado el nombre del campo. La etiqueta
adjunta a un cuadro de texto es a su vez un control (en este caso independiente).
b) Utilizando el cuadro de herramientas (para visualizarlo accedemos a la opción barras de herramientas
del menú “Inicio”). En este caso seleccionamos el icono correpondiente en el cuadro de herramientas
y hacemos click sobre la ventana del formulario para indicar dónde ubicaremos el control. El control es
creado como un control independiente. Para convertirlo en un control dependiente basta con escribir el
nombre del campo dentro del control.
Figura 6-11. Menú “Controles”.
Para crear un control de cualquier tipo, haremos click en la herramienta correspondiente del cuadro de
herramientas. Si queremos que el control sea dependiente, arrastraremos el campo subyacente de la lista de
campos hasta la ventana del formulario. Si queremos crear un control independiente o calculado simplemente
haremos click sobre el lugar correspendiente de la ventana del formulario.
Para crear un control calculado escribiremos la expresión que calcula el valor a mostrar dentro del control,
precedida del operador igual “=”. Por ejemplo, para crear un cuadro de texto que muestre la fecha actual,
escribiremos dentro del cuadro la expresión “=Fecha ()”.
Los controles tienen asociadas unas determinadas propiedades que podemos agrupar en categorías:
a) Formato: presentan características de apariencia del control. Tamaño de fuente, cursiva, etc
b) Datos: presentan características de los datos mostrados en el control. La propiedad Origen del control
muestra, en el caso de un control dependiente, el campo de la tabla o consulta subyacente. En el caso
de un control calculado, el origen del control mostrará la expresión que calcula el valor del campo,
pudiendo utilizar el generador de expresiones para construir dicha expresión.
c) Eventos. Macro o procedimiento de evento que Access ejecuta cuando ocurre un evento como hacer
click sobre el control.
d) Otras: nombre, descripción del control, orden de tabulación del control en el formulario, etc.
Figura 6-12. Ejemplo hoja de propiedades.
Al crear un control, una serie de propiedades toman valores por defecto. Podemos cambiar las propiedades
predeterminadas para un tipo de control seleccionando la opción “Propiedades” del menú. Si cambia el valor de
una propiedad del control, la propiedad del campo correspondiente no se ve afectada. Igualmente, si cambia el
valor de una propiedad de un campo en una tabla o consulta subyacente después de haber creado el formulario
que utiliza ese campo, deberemos actualizar el valor de esa propiedad en todos los controles dependientes de
dicho campo.
Se pueden cambiar simultáneamente las propiedades de varios controles utilizando la tecla mayúscula para
seleccionarlos en grupo. En la ventana de la hoja de propiedades aparecerá el texto “Selección múltiple”.
Access ofrece una gran variedad de controles que se pueden utilizar para hacer que el uso del formulario más
sencillo. Así, podemos reemplazar cuadros de texto por cuadros de lista o por grupos de opciones para
seleccionar un valor en lugar de tener que escribirlo. También podemos utilizar líneas y rectángulos para agrupar
la información relacionada o para crerar efectos especiales tales como sombreados
También tenemos la opción de crear un control “Cuadro de lista”. Un cuadro de lista es una lista de valores
entre los que se puede elegir el deseado. Una solución parecida sería crear un cuadro combinado. La diferencia
Desarrollo de la base de datos
34
xxxiv
fundamental es que en el caso de los cuadros combinados, se puede controlar si se permite introducir o no
valores nuevos. Las listas que aparecen en estos dos tipos de cuadros constan de una serie de filas de datos.
Cada fila puede tener una o más columnas, y las columnas pueden aparecer con o sin encabezados. En el caso
de los cuadros combinados, se puede controlar si se permite introducir o no valores nuevos.
Figura 6-13. Ejemplo de cuadro combinado.
Dependiendo de cual sea el origen de la información a mostrar en las filas de la lista, se pueden crear cinco
tipos de listas para un cuadro de lista o combinado. La propiedad “Tipo de origen de la fila” se establece de
acuerdo con el tipo de lista a mostrar:
a) Se pueden presentar las filas directamente desde cualquier tabla o consulta. En este caso elegiremos la
opción “Tabla/Consulta” como “Tipo de origen de la fila”, e indicaremos el nombre de la tabla o consulta
que contiene los datos a mostrar.
b) Se pueden presentar valores de una instrucción SELECT de SQL, en cuyo caso elegiremos
“Tabla/Consulta”, y escribiremos la consulta SQL en el origen de la fila.
c) Se pueden escribir los valores exactos, generando lo que se denomina una lista de valores. En el origen de
la fila escribiremos los valores a mostrar separados por signos de punto y coma.
d) Se puede crear una Lista de campos que muestra los nombres de los campos pertenecientes a una tabla o
consulta. En el origen de la fila escribiremos el nombre de la tabla o consulta.
e) Se pueden mostrar valores obtenidos a partir de una función de Access Basic, para lo cual debemos indicar
el nombre de la función.
Cuando deseemos mostrar múltiples columnas en una lista, debemos establecer las propiedades “Número de
columnas” y “Ancho de columnas” en la categoría Formato. La propiedad “Número de columnas” especifica
el número de columnas que mostrará la lista. Si el origen de la fila es una tabla o consulta, la lista mostrará el
número especificado de campos de dicha tabla o consulta, empezando por la izquierda. En la propiedad Ancho
de columnas se especifican las anchuras de las columnas a mostrar en la lista, separadas por punto y coma. Si
la anchura de una columna se establece a cero, ésta permanecerá oculta. Si se deja en blanco el ancho de la
columna se establecerá por defecto.
Figura 6-14. Propiedades de un cuadro de lista.
En un cuadro combinado, se mostrará solamente el valor situado en la primera columna visible a la izquierda
de la lista. Cuando se despliegue la lista, se verán todas las columnas.
En un cuadro combinado se puede seleccionar un valor de la lista o bien se puede introducir un valor que no
figure en dicha lista. Si queremos asegurar que los únicos valores que se introducirán en el cuadro son los ya
incluidos en la lista, debemos establecer la propiedad “Limitar a la lista”.
Cuando se seleccione un valor de la lista, el valor del control cambiará al valor de una de las columnas de la
lista. La propiedad “Columna dependiente” sirve para especificar qué columna se utilizará para los valores del
control. Es importante resaltar que el valor mostrado por el cuadro puede ser diferente del valor que tome el
cuadro. Por ejemplo, podríamos mostrar las columnas “Id_Proveedor” y “Nombre_proveedor” de la tabla de
“Proveedores” con anchos de campo 0 cm y 3 cm, respectivamente. Sólo se visualizará la columna
Nombre_proveedor, cuando un usuario seleccione en la lista el nombre del proveedor, el sistema recogerá el
“Id_Proveedor” que es la clave primaria de la tabla. Esto sería posible si pusiéramos dependiente la columna
“Id_Proveedor”. Si hacemos que el control sea dependiente de un campo, dicho campo tomará el valor que
tome el control.
Podemos usar también las casillas de verificación. Estos tipos de controles se utilizan para definir valores
“Sí/No”. Cuando están seleccionados, estos controles indican un valor “Sí” o “Verdadero”. Cuando están
desactivados, indican un valor “No” o “Falso”. Estos controles son especialmente útiles cuando dependen de
campos “Si/No”, en cuyo caso Access almacenará el valor en la tabla subyacente y lo mostrará en el formulario.
Si los controles dependen de otro tipo de campo, Access almacenará el valor “–1” si el control está
seleccionado, y “0” si no lo está.
Figura 6-15. Campos verificación.
Otro control útil son los grupos de opciones. Estos se utilizan para presentar un conjunto limitado de
alternativas. Un grupo de opciones consta de un marco de grupo que contiene un conjunto de casillas de
verificación, botones de opción o botones de alternar. El marco dispone de una etiqueta adjunta.
Un grupo de opciones facilita la selección de un valor, puesto que permite hacer click en una de las alternativas
sin necesidad de escribir en un cuadro de texto ni desplazarse por una lista. Además, se puede establecer como
predeterminada una de las opciones para simplificar la introducción de datos. Solamente se puede seleccionar
una opción de un grupo a la vez.
Figura 6-16. Grupo de opciones.
Desarrollo de la base de datos
36
xxxvi
Si un grupo de opciones es dependiente de un campo, será el marco del grupo quien dependa del campo, no
cada opción individual existente dentro de él. Un marco de grupo también se puede establecer como un
objeto independiente. Cuando en un grupo de opciones se utilicen casillas de verificación, botones de opción
o botones de alternar, las propiedades de éstos serán diferentes a cuando se utilizan como controles
independientes. Cada opción de un grupo tiene su propia propiedad “Valor de la opción”, en lugar de la
propiedad “Origen del control”. El grupo de opciones tomará el valor asignado a la propiedad “Valor de la
opción” de la opción seleccionada. Si el grupo de opciones es dependiente de un campo, dicho campo tomará
el “Valor de la opción” que haya sido seleccionado. Una opción dentro de un grupo solamente podrá tomar
valores numéricos.
6.4.2 Creación de macros.
Las Macros son un método sencillo para llevar a cabo una o varias tareas básicas como abrir y cerrar formularios,
mostrar u ocultar barras de herramientas, ejecutar informes, etc. También sirven para crear métodos abreviados
de teclado y para que se ejecuten tareas automáticamente cada vez que se inicie la base de datos.
Si guardamos la Macro con el nombre de AutoExec, cada vez que se inicie la base de datos, se ejecutará
automáticamente. Esto es debido a que Access al arrancar busca una macro con ese nombre, si la encuentra será
el primer objeto que se ejecute antes de lanzar cualquier otro. Esta opción es muy socorrida a la hora de efectuar
comprobaciones o lanzar procesos antes de que el usuario empiece a trabajar con la base de datos. Nosotros
vamos a crear el botón actualización para ejecutar la macro de mismo nombre. Lo hacemos así para que el
usuario final tenga la opción de actualizar cuando crea conveniente el sistema.
Para definir una macro, indicaremos una acción o conjunto de acciones que automatizarán un proceso. Cuando
ejecutemos una Macro, el proceso se realizará automáticamente sin necesidad, en principio, de interacción por
nuestra parte. Podremos ejecutar consultas de forma secuencial.
Para crear una macro nos vamos al menú “inicio” y seleccionamos el botón “Macro”. Nos aparecerá una pestaña
como la siguiente.
Figura 6-17. Creación de macros.
Añadiremos en el campo “Acción” el nombre de las consultas que queramos que ejecute nuestra macro. En
argumentos le daramos los parámetros necesarios para que esa consulta se ejecute con éxito. Una vez guardada
el aspecto de una macro será el siguiente:
Figura 6-18. Creación de macros 2.
Esta macro estaría programada para el botón actualizar de la base de datos. La función de esta macro sería la de
anexar todos los registros nuevos en el Excel de entrada de los comerciales, y a continuación, actualizar la tabla
Mazo_conc_tipo” con los parámetros de fabricación de cada mazo descritos en la hoja de cálculo “Part Master”.
Las consultas usadas serán explicadas con más detenimiento en los apartados posteriores.
6.4.3 Creación de consultas
En una base de datos bien diseñada, los datos que se quieren plasmar en un formulario o informe suelen estar
repartidos en varias tablas. Con una consulta, se puede extraer información de diversas tablas y ensamblarla para
mostrarla en el formulario o informe. Una consulta puede servir para pedir resultados de datos de la base de
datos, para llevar a cabo una acción relativa a los datos o para ambas cosas. También sirve para obtener una
respuesta a una pregunta sencilla, efectuar cálculos, combinar datos de distintas tablas o agregar, cambiar o
eliminar datos de una base de datos. Dada su enorme versatilidad, existen muchos tipos de consulta y el tipo que
se cree depende de la tarea que quiera realizarse.
Para la creación de una consulta, en el menú principal de nuestro sistema seleccionaremos la opción “Crear”. Se
nos abrirá un menú de opciones, entre todas las posiblidades escogeremos “Diseño de consulta”. Tendremos 2
opciones;
a) Vista SQL: Si creamos la consulta en esta vista sólo tendremos que introducir el código que queremos
que se ejecute al llamarla. Por ejemplo si queremos insertar registros en la tabla Mazo_conc_tipo el
código podría ser:
INSERT INTO Mazo_conc_tipo (Item, Comerciales, Id_avión, [P/N], Fecha_entrada, Fecha_salida)
SELECT Item, Comercial, Avión, [P/N], [Fecha pedido], [Fecha necesidad]
FROM Comerciales_vinculada;
Desarrollo de la base de datos
38
xxxviii
Vista Diseño: Es una forma visual de crear una consulta, al seleccionar este método se nos abrirá una
pestaña vacía. Podremos incluir las tablas a las que queremos hacer la consulta haciendo clic en el botón
derecho y seleccionando “Mostrar Tabla”. Para hacer la misma consulta que la del ejemplo anterior
tendríamos que mostrar la tabla “Mazo_conc_tipo” y la tabla “Comerciales_vinculada”. Hacemos clic
en los campos de la tabla “Comerciales_vinculada” que queremos insertar. En la parte inferior, en los
campos “Anexar a” tendremos que poner los campos de la tabla “Comerciales_vinculada” que
queramos que reciban las campos a insertar. Al ser clave primaria el ITEM los registros no se
duplcarían. Los dos métodos de crear una consulta son equivalentes. Podríamos decir que el segundo
método es una forma visual de ver el código SQL. Finalmente el aspecto final de la consulta será:
Figura 6-19. Ejemplo de consulta.
6.5 Formularios para la entrada de datos.
En el apartado anterior hemos descrito la creación de los formularios de navegación. Estos fomularios son usados
como interfaz gráfica, pero no permiten la insercción de datos en el sistema. Para este fin tenemos los formularios
para la entrada de datos. La idea es tener un formulario con campos editables. Una vez rellenos estos campos y
dandole click al botón guardar, los registros se guardarían en una tabla dentro de nuestro sistema.
Nuestra BBDD tiene implementado un formulario de estas características para la entrada de registros por parte
de los comerciales. El fin que sigue la implementación de este método es la supresión final de los archivos excel
de entrada.
Para la creación de este tipo de formularios seguimos los pasos descritos a continuación:
En el menú principal seleccionaremos la opción “Crear”. Se nos abrirá un menú de opciones, entre todas las
posiblidades escogeremos “Diseño del formulario”.
Figura 6-20. Creación de los formularios de entrada de datos 1.
En esta ocasión nos aparecerá una pestaña a cuadros con el nombre genérico “Formulario1”. Estos cuadros
sirven para cuadrar los campos que introduzcamos en el formulario. En la parte derecha de la pestaña nos aparece
el menú “Propiedades del formulario”. En este menú tendremos que escoger el origen de los datos del
formulario. En este caso seleccionamos la tabla “Mazo_conc_tipo”.
Figura 6-21. Creación de los formularios de entrada de datos 3.
Con esta acción hemos conseguido que nuestro formulario esté asociado a esta tabla. Cuando un comercial
introduzca un registro en este formulario, sería equivalente a que lo introdujese en la hoja de datos Excel.
Como no queremos que el formulario muestre todos los campos de la tabla, escogeremos los campos que
podrán introducirse manualmente. Seleccionaremos los mismos campos que los de la hoja de cálculo
“Comerciales”.
Para formar nuestro formulario buscamos el campo “Mostrar campos existentes” del menú herramientas. Se
nos mostrará un desplegable con todos los campos de la tabla origen del formulario.
Figura 6-22. Formulario de entrada de datos. Menú herramientas.
Desarrollo de la base de datos
40
xl
Figura 6-23. Formulario de entrada de datos. Lista de campos.
De la lista escogemos los campos “ITEM”,”P/N”,”Comerciales”,”Fecha_entrada”,”Fecha_salida”.
Finalmente crearemos un botón que estará programado para ejecutar una sentencia “INSERT INTO” a la tabla
“Mazo_conc_tipo”. Para crear el botón seleccionaremos el 4º elemento del menó controles. Insertaremos el
botón en la parte inferior del formulario e insertaremos una imagen que se asocie a guardar.
Figura 6-24. Formulario de entrada de datos. Menú controles.
Para que el botón ejecute la inserción el cógido usado será el siguiente:
INSERT INTO Mazo_conc_tipo (Item, Comerciales, Id_avión, [P/N], Fecha_entrada, Fecha_salida )
SELECT Item, Comercial, Avión, [P/N], [Fecha pedido], [Fecha necesidad]
FROM Formulario_Comerciales;
Nuestro formulario “Comerciales” finalmente estaría compuesto de 5 campos editables y de un botón de
guardado. Al introducir datos, el formulario comprobará si estos datos cumplen las características del campo
donde van a ser insertados. Esto lo haremos configurando la hoja de propiedades de cada campo:
a) ITEM: Es un campo numérico sin cifras decimales
b) Comerciales: Es un campo texto de tres carácteres de longitud.
c) Fecha_salida: Será un campo fecha corta y tiene que ser menor que el campo “Fecha_entrada”.
d) Fecha_entrada: Será un campo fecha corta y su valor tiene que ser mayor que “Fecha_salida”.
Figura 6-25. Formulario de entrada de datos. Configuración de campos.
Cuando el comercial vaya a introducir los datos, sólo se insertarán si cumplen todos los requisitos. Cuando le de
al botón de guardar los datos serán anexados a la tabla “Mazo_conc_tipo”. Se accederá a este formulario desde
el formulario “Inicio” seleccionando el botón “Formulario Comerciales”. La siguiente figura muestra el acabado
la vista final del formulario:
Figura 6-26. Formulario “Comerciales”.
Desarrollo de la base de datos
42
xlii
Si contiene datos de más de una tabla, Tenemos dos métodos para la construcción de este tipo de formularios:
a) Crear una consulta que combine datos de varias tablas y después basar un formulario en esa consulta.
b) Usar un subformulario, que es simplemente un método para introducir un formulario dentro de otro
formulario. El formulario que es incluido en el formulario principal recibe el nombre de subformulario.
En este método, el formulario principal y el subformulario deben estar vinculados, de modo que el
subformulario sólo mostrará los registros que estén relacionados con los del formulario principal. El uso de
subformularios es muy aconsejable para mostrar datos almacenados en tablas o en consultas con una relación
de 1-N, pero, debemos ser cautos a la hora del diseño de las tablas o consultas subyacentes. Para la construcción
de estos subformularios debemos tener en cuenta que:
a) Las tablas tienen una relación 1-N. El formulario principal presenta la tabla con cardinalidad (1) y el
subformulario la tabla con cardinalidad (N).
b) Hay que establecer el campo común sobre el que se puedan vincular.
c) Si usamos un vínculo que no es clave principal ni externa puede ser interesante indexarlo.
Para crear un formulario principal y un subformulario, debemos diseñar ambos por separado. Después
insertaremos el subformulario en el formulario principal. Un subformulario es un formulario independiente, es
decir, se diseña y se guarda exactamente de la misma forma que cualquier otro formulario. Después se puede
agregar a un formulario principal.
Figura 6-27. Ejemplo uso de subformulario.
Para crear el formulario de la figura anterior hemos creado un formulario con los datos de la tabla “Contiene”.
Esta tabla representa el identificador de los cables en relación a sus proveedores. De la tabla “Contiene”
mostramos sólo el campo “Id_Cable”. Creamos un subformulario de la tabla “Proveedores”, cuya tabla
contiene el identificador y los datos de cada proveedor. Unimos el formulario principal con el subformulario
por medio del campo “Id_Cable”. Cuando accedemos al formulario principal nos aparecerá la lista de todos
los campos “Id_Cable”, y seleccionando uno de ellos nos aparecerá un desplegable con los datos de los
proveedores de ese cable.
6.6 Generación de informes
Los informes constituyen un recurso específico para la representación de información por pantalla de nuestra
base de datos. El origen de estos informes pueden ser una tabla o consulta. Además, es posible incluir en el
informe elementos gráficos como tablas o esquemas para hacerlo mas atractivo. Hay dos formas de crear un
informe: mediante un asistente de creación o seleccionando un “Informe nuevo”. Nosotros usaremos la opción
“Informe Nuevo”, ya que nos permite crear un informe desde el inicio.
Para mostrar como se genera un informe, usaremos como ejemplo el “Informe Pruebas” de nuestra
BBDD.Este informe se basa en la consulta “Pruebas”, la cual, selecciona los registros que tienen el campo
“Pulsos_Necesarios” igual al campo “Pulsos_Consumidos”. Estos serán los mazos terminados que se pasan a
pruebas.
Figura 6-28. Consulta “Pruebas”
Con la consulta seleccionada nos dirigimos al menú inicio y seleccionamos la opción “Informe”. Se nos
generará una pestaña nueva dividida en 4 secciones: título, encabezado de página, detalle, pié de página y pié
de informe.
a) Título: contendrá la información que se indica únicamente al principio del informe.
b) Encabezado de página: contendrá la información que se repetirá al principio de cada página, como los
encabezados de los registros.
c) Detalle: estará formado por los datos seleccionados en la consulta origen.
d) Pié de informe: contendrá la información que se repetirá al final de cada página, como la fecha del
informe o el número de página,
Desarrollo de la base de datos
44
xliv
Figura 6-29. Informe “Pruebas”
Para que nuestro informe muestre los datos de la consulta “Pruebas”, debemos acceder a la “Hoja de
Propiedades”. Esta hoja de propiedades se podrá seleccionar en el menú herramientas.
Figura 6-30. Menú herramientas.
Una vez seleccionado, se nos abrirá una pestaña con las propiedades del informe. En el campo “Origen de
datos” deberemos escoger la consulta “Pruebas”.
Figura 6-31. Creación de informes “Hojas de propiedades”.
Como no queremos que el informe muestre todos los campos de la consulta, escogeremos los campos de manera
manual. Para formar nuestro informe buscamos el campo “Mostrar campos existentes” del menú herramientas.
Se nos mostrará un desplegable con todos los campos de la consulta origen del infome.
Figura 6-32. Creación de informes. Menú herramientas.
Figura 6-33. Creación de informes. Lista de campos.
De la lista escogemos los campos relacionados con las pruebas a pasar además de la clave principal ITEM y el
P/N. Con estos campos cualquier operario del área de pruebas podría sacar el informe y comprobar el estado
real del área en cuestión.
Desarrollo de la base de datos
46
xlvi
Figura 6-34. Informe “Pruebas”
7 IMPLEMENTACIÓN DE LA BASE DE DATOS
En este apartado abordaremos con más profundidad la creación de la base de datos. Lo primero que veremos
será la construcción de los formularios, en los cuales, tendremos botones configurados para el acceso a informes
y otros formularios.
7.1 Formularios de navegación
7.1.1 Formulario “Control de acceso”
El primer formulario que nos aparecerá nada más abrir nuestra base de datos será el llamado “Formulario Control
de Acceso”.Sólo podrán acceder a la base de datos los usuarios registrados, el sistema no permitirá un acceso
libre a todos los usuarios. Este formulario se programará para que pida un nombre de usuario y una contraseña.
Si la contraseña no es correcta, nos aparecerá un mensaje por pantalla “La contraseña introducida no es correcta”.
También se programará para que de error cuando no se introduzca el campo usuario o el campo nombre. En este
caso el mensaje de error será “Por favor, rellene los campos usuario y contraseña”.
El aspecto de este formulario será el siguiente:
Figura 7-1. Formulario “Control de Acceso”
Implementación de la base de datos
48
xlviii
Para simplificar el código crearemos la tabla “Usuarios”. En esta tabla se introducirán todos los usuarios que
puedan acceder a la base de datos, y sus contraseñas. Nuestro código buscará si los datos introducidos
corresponden a un registro de la tabla. Si es así se abrirá el menú “Inicio”, si no coincide le saldrá por pantalla
el mensaje “Los datos introducidos no son correctos”
Figura 7-2. Formulario “Control de Acceso”. Tabla Usuarios
El botón “Acceso” estará programado para que ejecute el siguiente código:
Explicaremos las partes más importantes del código. En el “Anexo 1” tendremos un manual más detallado de
VBA que podemos consultar.
Declaración de variables
--------------------------------------------------------------------------------------------------------------------------------------
Dim sSQL As String ‘Declaración de una variable string
Dim rs As Recordset ‘Declaración de objeto para representar selecciones de tablas
Dim db As DAO.Database ‘ Declaración de objeto para acceder a una base de datos
--------------------------------------------------------------------------------------------------------------------------------------
Código VBA
--------------------------------------------------------------------------------------------------------------------------------------
‘ Comprobación de los datos introducidos
If Nz(Me.txtNombre.Value,””) =”” Or Nz(Me.txtContraseña.Value ,””) =”” Then
‘ Comprobamos que Nombre y contraseña están rellenos
MsgBox ("Por favor rellene Usuario y contraseña.") ‘Muestra mensaje por pantalla
Else
‘ Consulta select a la tabla Usuario buscando el registro usuario y contraseña
sSQL = "SELECT * from Usuarios " ‘Código SQL
sSQL = sSQL & " WHERE Nombre=Me.txtNombre.value AND Contraseña=Me.txtContraseña.value"
Set db = CurrentDb() ' origen en base de datos actual
Set rs = db.OpenRecordset(sSQL) ' sirve para ejecutar sentencias de selección
If rs.RecordCount > 0 Then ‘Comprobamos si existe el registro
.OpenForm ("Pantalla de Inicio") 'si la consulta devuelve resultados abro el formulario inicio
Else
MsgBox ("Los datos introducidos no son correctos.") ‘Muestra mensaje por pantalla
End If
End If
-------------------------------------------------------------------------------------------------------------------------------
Implementación de la base de datos
50
l
A continuación mostraremos las pruebas realizadas para observar el correcto funcionamiento del código.
a) Usuario o contraseña no introducidos: Alguno de los campos no se han introducido. Si es así, Access
mostrará un mensaje por pantalla.
Figura 7-3. Formulario “Control de Acceso”. Mensaje “Datos no introducidos”
b) Usuario o contraseña incorrectos: Ocurre cuando no aparece el registro “Contraseña” más “Usuario en
la tabla “Usuario”. Nos mostraría un mensaje de error por pantalla.
Figura 7-4. Formulario “Control de Acceso”. Mensaje “Datos incorrectos”
c) Datos correctos: Si los datos introducidos fueran correctos, se accederá al formulario “Inicio”. Desde
este formulario se podrá acceder a todos los informes y formularos de nuestra base de datos. En el
siguiente apartado describiremos la programación de dicho formulario.
7.1.2 Formulario ”Inicio”
Una vez hayamos conseguido pasar el control de acceso, lo primero que veremos será el formulario de inicio.
Este formulario está compuesto por 4 botones que nos llevan a otros formularios, y un quinto botón de
actualización. El botón de actualización está programado para ejecutar una macro que actualiza nuestra BBDD.
Figura 7-5. Formulario “Inicio”
A continuación abordaremos la utilidad de cada uno de los botones de este formulario.
Botón de actualización: Es una parte vital de nuestra base de datos. Esta programado para ejecutar una serie de
consultas que harán que nuestra base de datos esté actualizada. Hemos optado por usar macros porque nos
proporcionaba un método visual y de mejor comprensión que el simple código VBA.
Figura 7-6. Macro “Actualización”
Implementación de la base de datos
52
lii
Consulta “Anexar Comerciales_vinculada”: El objetivo de esta consulta es pasar todos los registros del Excel
de comerciales vinculado a la tabla llamada “Mazo_conc_tipo”. El código usado para crear la consulta es el
siguiente:
INSERT INTO Mazo_conc_tipo (Item, Comerciales, Id_avión, [P/N], Fecha_entrada, Fecha_salida)
SELECT Item, Comercial, Avión, [P/N], [Fecha pedido], [Fecha necesidad]
FROM Comerciales_vinculada;
Figura 7-7. Consulta “Anexar Comerciales_vinculada”.
Consulta “Actualiza Mazo_conc_tipo”: la función de esta consulta es actualizar los párametros de fabricación
de los mazos de la tabla “Mazo_conc_tipo”. Estos parámetros están definidos en la tabla vinulada “Part Master”.
El código utilizado es el siguiente:
UPDATE Mazo_conc_tipo INNER JOIN [Part Master] ON Mazo_conc_tipo.[P/N] = [Part Master].[P/N] SET
Mazo_conc_tipo.Área_fabricación = [Part Master].[Área de fabricación], Mazo_conc_tipo.Longitud = [Part
Master].[Longitud], Mazo_conc_tipo.Tipo_Mesa = [Part Master].[Tipo de Mesa]
WHERE (((Mazo_conc_tipo.[P/N])=[Part Master].[P/N]));
En vita diseño la consulta quedaría:
Figura 7-8. Consulta “Actualiza Mazo_conc_tipo”.
Los 4 botones superiores del formulario “Inicio” están programados para ejecutar una macro. Esta macro abré
el formulario de navegación con el mismo nombre del botón.
Figura 7-9. Macro botón “Informes de Incidencias”
Implementación de la base de datos
54
liv
7.1.3 Formulario “Planificación de Áreas”
Este formulario está compuesto por 3 botones para la planificación de cada área, y otros 2 para informes
asociados. Cada uno estará ligado a un formulario distinto. En la figura inferior vemos la vista de este formulario.
Figura 7-10. Formulario “Planificación de Áreas”
Botones de Planificación de áreas: cada uno abre un formulario editable en el cual se pueden ver los P/N
asignados a su área. El responsable de cada área será el encargado de editar la información. Estos formularios
están formados por una consulta que muestra los mazos de su área y los campos “Pulsos consumidos” y “Motivo
Parada” de “Mazo_conc_tipo”. Como ejemplo podemos ver el formulario de carga baja. Este formulario se basa
en la consulta “Carga Baja” que se muestra en la siguiente figura:
Figura 7-11. Consulta “Carga Baja”
En este caso sólo se mostraran en el formulario los mazos con el campo “Área de Fabricación” igual a “Baja”.
Esta consulta tiene asociadas los campos de la tabla “Pulsos Consumidos” y “Motivos Parada”. El formulario
hace la consulta y muestra los datos no editables de la consulta y los campos editables de la tabla “General”. En
la siguiente figura muestra un detalle del formulario “Carga Baja”.
Figura 7-12. Formulario “Carga Baja”
Al igual que este formulario tendremos tres, uno por cada área de fabricación. La diferencia entre las consultas
estará en los datos que muestra cada consulta. En la consulta “Carga Media” mostrara los registros cuyo campo
“Área de fabricación” sea “Media”. Igualmente para “Carga Alta” buscando los mazos con “Área de
fabricación” igual a “Alta”
Informe “Mazos sin fabricar”: Este informe será accesible a los responsables de área y a control de producción.
Nos indicará que están esperando a que se inicie su fabricación. El criterio seleccionado en la consulta es que el
campo “En_fabricación” sea distinto de “Si”. Este informe es muy útil para saber que mazos se han quedado
atascados sin iniciar su fabricación.
Figura 7-13. Informe “P/N sin pulsos consumidos Carga Media”
Implementación de la base de datos
56
lvi
Este informe está basado en la consulta de mismo nombre. Esta consulta muestra los registros que tienen como
campo “En_Fabricación” algo distinto de “Si”.
El código usado será el siguiente:
SELECT ITEM, [P/N], Fecha_entrada, Fecha_salida, En_fabricación
FROM Mazo_conc_tipo
WHERE (((Mazo_conc_tipo.En_fabricación)<>"Si"));
A continuación mostramos una imagen de la consulta asociada:
Figura 7-14. Informe “Mazos sin fabricar”
Informe “Órdenes paradas”: La tabla “Mazo_conc_tipo” tendrá un campo editable “Motivo_Parada”. El
responsable de cada área podrá poner el motivo por el cual un mazo no se puede terminar, por ejemplo: falta de
material, falta documentación, etc. En este informe se mostrarán todos aquellos mazos que tengan el campo
“Parada” relleno. En la figura inferior se muestra un ejemplo.
Figura 7-15. Informe “Órdenes paradas”
Este informe tiene una consulta asociada del mismo nombre. Esta consulta muestra los registros que tienen el
campo “Motivo_Parada” relleno.
SELECT ITEM, [P/N], Área_fabricación, Motivo_parada
FROM Mazo_conc_tipo WHERE (((Mazo_conc_tipo.Motivo_parada) Is Not Null));
La imagen de la consulta asociada será la siguiente:
Figura 7-16. Consulta “Órdenes paradas”
Implementación de la base de datos
58
lviii
7.1.4 Formulario “Informes de seguimiento”
Este formulario está compuesto por 3 botones que generan informes de nuestra base de datos.
Figura 7-17. Formulario “Informes de seguimiento”
Informe Pruebas: Este informe nos mostrará las pruebas de los mazos que ya han sido fabricados. Para saber
que mazos cumplen esta condición comprobaremos que el campo “Pulsos Consumidos” igual al campo “Pulsos
Necesarios”.
Figura 7-18. Informe “Pruebas”
Este informe tiene una consulta asociada del mismo nombre. Esta consulta muestra los registros que tienen el
campo “Pulsos Consumidos” igual al campo “Pulsos Necesarios”. El código SQL asociado es:
SELECT ITEM, [P/N], Pasar_prueba_conectores, Pasa_prueba_conectores, Pasar_prueba_temperatura,
Pasa_prueba_temperatura, Pasa_prueba_EMI, Pasar_prueba_EMI
FROM Mazo_conc_tipo
WHERE (((Mazo_conc_tipo.Pulsos_consumidos) = [Mazo_conc_tipo].[Pulsos_necesarios]))
Figura 7-19. Consulta “Pruebas”
Este informe nos muestra la tabla Pruebas”. Esta tabla se construye ejecutando la consulta “Anexar a Pruebas”,
que anexa a pruebas los registros de tabla general que tienen el campo “Pulsos Consumidos” igual al campo
“Pulsos” de la tabla Part Master. Para saber más de esta consulta está más detallada en el botón de actualización
del “Formulario Inicio”
Informe “Motivos_parada_pruebas”: Este informe nos muestra los motivos por los que un mazo no pasa las
pruebas. Está basado en la consulta del mismo nombre. Muestra los mazos que tienen algún campo de
Pasa_prueba_X igual a “No”. El código utilizado será el siguiente:
SELECT [ITEM], [Motivo_parada_conectores], [Motivo_parada_temperatura], [Motivo_parada_EMI],
Pasar_prueba_temperatura
FROM Mazo_conc_tipo
WHERE ((( Pasa_prueba_conectores)="No")) OR ((( Pasa_prueba_temperatura)="No")) OR
((( Pasa_prueba_EMI)="No"))
GROUP BY [ITEM], [Motivo_parada_conectores], Pasar_prueba_temperatura;
En vista diseño vemos que esta consulta selecciona los mazos desde la tabla “Mazo_conc_tipo”. La condición
para que un registro sea seleccionado es que tenga un campo “Pasa_prueba_X” igual a “No”.
Implementación de la base de datos
60
lx
Figura 7-20. Consulta “Motivo_fallos_prueba”
Para mostrar esta consulta de forma adecuada, hemos creado un informe a partir de ella. Este informe muestra
los mismos campos de la consulta. Además, le hemos agragado un campo calculado “Cuenta” al final del
informe. Nos devuelve el número de mazos que están parados en el área de pruebas.
Figura 7-21. Consulta “Motivo_fallos_prueba”
Informe “Mazos sin stock”: Nos muestra los P/N que no se puede fabricar ningún mazo. Este informe se basa
en la consulta del mismo nombre. En esta consulta recoremos todos los P/N y mostraremos aquellos cuyos cables
no lleguen a la longitud mínima en el almacen.
Figura 7-22. Consulta “Mazos sin stock”
El código usado para esta consulta será el siguiente:
SELECT [Part Master].[P/N], [Part Master].Longitud
FROM ([Part Master] INNER JOIN Contiene ON [Part Master].[P/N] = Contiene.[P/N]) INNER JOIN
Cableado ON Contiene.Id_Cables = Cableado.Id_Cable
WHERE (((Cableado.Cantidad)<[Part Master].[Longitud]))
GROUP BY [Part Master].[P/N], [Part Master].Longitud;
Figura 7-23. Informe “Mazos sin stock”
Implementación de la base de datos
62
lxii
Informe “Saturación de tipo de mesa por área”: nos indicará cuantos mazos en cada área están asignados a una
mesa concreta. Usamos una consulta de referencias cruzadas. El encabezado de columnas serán los tipos de
mesa, y los encabezados de filas las 3 áreas.
En la siguiente figura se muestra un ejemplo del informe.
Figura 7-24. Informe “Saturación de tipo de mesa por área”
A continuación se muestra el detalle de la consulta asociada a este informe:
Figura 7-25. Consulta “Saturación de tipo de mesa por área”
El código usado es el siguiente:
TRANSFORM Count (General.Tipo_Mesa) AS CuentaDeTipo_Mesa
SELECT [Part Master].[Área de fabricación]
FROM [General] INNER JOIN [Part Master] ON General.[P/N] = [Part Master].[P/N]
GROUP BY [Part Master].[Área de fabricación]
PIVOT General.Tipo_Mesa;
La sentencia TRANSFORM es la que se utiliza para definir una consulta de referencias cruzadas. En la
cláusula PIVOT indicamos la columna cuyos valores van a definir las columnas del resultado
7.1.5 Formulario “Varios”
Estos formularios son usados por control de producción. Esta compuesto por 2 botones, el primero nos muestra
un informe de los mazos que han sido fabricados, y el segundo, los mazos que están en fabricación de todos los
aviones.
Informe Históricos: Aquí estarán todos los mazos que han sido fabricados, el origen del informe será la tabla
“Mazo_conc_tipo”. Esta consulta muestra los mazos que tienen todas sus pruebas pasadas.
A continuación mostramos un detalle del formulario en vista hoja de datos:
Figura 7-26. Informe “Histórico”
Un mazo siempre tiene que pasar como mínimo 2 pruebas. Teniendo en cuenta está condición impondremos
que se muestren todos los registros que:
a) Tengan todos sus campos “Pasar_prueba_x” a “Si” y los campos “Pasa_prueba_x” sean igual a
“Pasada”.
b) Tengan los dos campos “Pasa_prueba_x” a “Pasada” cuando su campo asociado “Pasar_prueba_x”
esté a “Si”.
Partiendo de esta limitación la consulta asociada es la siguiente:
Figura 7-27. Consulta “Histórico”
Implementación de la base de datos
64
lxiv
Informe Aviones: Este informe nos mostrará los aviones que se entán fabricando, y cuantos mazos tienen en
fabricación cada uno de ellos. Está basado en la consulta de mismo nombre. La consulta agrupa la tabla general
por aviones y hace la cuenta de cada P/N asignado a cada avón. En la figura inferior mostramos el detalle de la
consulta.
Figura 7-28. Consulta “Aviones en fabricación”
El código que usamos fue el siguiente: SELECT Avión, Count([P/N]) AS [P/N_Fabricación]
FROM [Mazo_conc_tipo]
Nos devuelve una columna con los aviones fabricados y en otra el número de mazos que están en proceso.
Esta consulta tiene un informe asociado, en la figura inferior podemos ver este informe
Figura 7-29. Informe “Aviones en fabricación”
7.1.6 Formulario “Comerciales”
Este formulario permite ingresar mazos a fabricar a nuestra BBDD sin necesidad de utilizar hojas de cálculos.
En un principio los mazos se ingresaban mediante excel de entrada. En un futuro se quiere dejar apartado los
archivos excel y que todos los datos se introduzcan directamente en la base de datos. Esto solo es possible
mediante formularios.
Aquí tenemos un formulario editable, los datos introducidos en el irán a la tabla “Mazo_conc_tipo”. Cuando se
haga click en el botón actualizar estos datos, junto a los demás, pasarán a la tabla general y los mazos serán
producidos.
Figura 7-30. Formulario “Comerciales” 1
Este formulario se ha creado con herramienta “Formulario en blanco” del menú principal. Al hacer clic nos
genera una pestaña en blanco. Cambiamos el origen de los registros a nuestra tabla principal “Mazo_conc_tipo”
y agregamos los campos que queremos que se puedan introducir. En nuestro caso serán los mismos campos que
se introducían por medio del archivo Excel “Comerciales”.
Figura 7-31. Formulario “Comerciales” 3
Implementación de la base de datos
66
lxvi
A continuación agregamos los campos haciendo clic con el botón derecho del ratón en la pestaña y seleccionar
la opción “Agregar campo”. Finalmente nuestro formulario en vista diseño quedaría así:
Figura 7-32. Formulario “Comerciales” 4
Por último incluimos el botón de guardar registro. Para crear este botón le damos al 4º elemento del menú
controles, como se explicó en apartados anteriores.
Figura 7-33. Menú “Controles” de formulario de navegación.
El botón será programado para que ejecute una instrucción INSERT INTO a la tabla “Mazo_conc_tipo” con los
parámetros introducidos en el formulario.
INSERT INTO Mazo_conc_tipo ( Item, Comerciales, Id_avión, [P/N], Fecha_entrada, Fecha_salida )
SELECT Item, Comercial, Avión, [P/N], [Fecha pedido], [Fecha necesidad]
7.1.7 Formulario “Pruebas”
Cuando los mazos pasen las pruebas, el resultado de estas debe de quedar recogidas en las tablas de la base de
datos. Para este fin se construye el formulario “Pruebas”. Este formulario está constituido de una lista con todos
los mazos del área pruebas y los campos “Pasar_prueba_x” “Pasa_prueba_x” y “Motivo_parada_x”.Los mazos
que aparecerán en esta lista serán los que tengan el campo “Pulsos_necesarios” igual al campo
“Pulsos_Consumidos”.
Contendrá un cadro de verificaciones donde se podrá escoger que pruebas a pasadado el mazo seleccionado en
la lista. Por último se programará un botón de guardado que ejecutará un código VBA. Se ha decidido hacer así
porque era muy complejo hacerlo por medio de macros.
El código VBA utilizado es el siguiente:
Implementación de la base de datos
68
lxviii
El formulario cuenta con 3 botones de verificación para introducir las pruebas pasadas. A continuación se
muestra la imagen de este formulario.
Figura 7-34. Formulario “Pruebas”
7.1.8 Formulario “Paradas”
En el proceso de fabricación, puede ser que un mazo no pueda ser fabricado. La causa debe de quedar reflejada
en la base de datos. Para este fin se creó el formulario “Paradas”. Este formulario está compuesto de una lista
cual se muestran los registros que están en proceso de fabricación. Para ello se basa en una consulta que recoge
los mazos que tienen el campo “Pulsos Consumidos” distinto de “Pulsos necesarios”.
Figura 7-35. Consulta “mazos en fabricación”
Los registros que resultan de esta consultan se mostraran en el cuadro de lista. El usuario podrá seleccionar un
elemento de la lista y a continuación pulsar una de las 3 opciones de parada implementad. El grupo de opciones
facilita la selección de un valor, puesto que permite hacer click en una de las alternativas sin necesidad de
escribir en un cuadro de texto ni desplazarse por una lista. Además, se puede establecer como predeterminada
una de las opciones para simplificar la introducción de datos. Solamente se puede seleccionar una opción de
un grupo a la vez.
Figura 7-36. Grupo de opciones para el formulario “Paradas”
Por último se programará un botón de guardado que ejecutará un código VBA. Se ha decidido hacer así porque
era muy complejo hacerlo por medio de macros.
El código VBA utilizado es el siguiente:
Implementación de la base de datos
70
lxx
Finalmente el formulario “Parada” mostrará el siguiente aspecto:
Figura 7-37. Formulario “Paradas”
7.1.9 Formulario “Producción”
En el proceso de producción, podría ocurrir que un mazo no pudiera entrar en fabricación. Esto podría pasar por
varios motivos, por ejemplo por la falta de stock de un cable. En este formulario queremos que control de
producción pueda ver los mazos que no están fabricándose, y que puedan introducir información al respecto.
Para ello tendremos la consulta “Mazos__sin_fabricar”, en la cual se seleccionan los mazos que tienen el campo
“En_fabricación” distinto de “Si”.
Figura 7-38. Consulta “Mazos sin fabricar”
El código SQL de está consulta será el siguiente:
SELECT [ITEM], [P/N], [En_fabricación], [Área_fabricación], [Longitud]
FROM Mazo_conc_tipo
WHERE (((Mazo_conc_tipo.En_fabricación ) <> "Si"))
Agregaremos al formulario un campo verificación “Apto_para_fabricar”. Control de producción pulsará este
campo si el mazo está listo para su fabricación. En campo si no está verificado el campo se habilitará un campo
editable “Motivo_parada”. En este campo el responsable podrá rellenar el motivo por el cual el mazo no entra
en producción.
Figura 7-39. Verificación y campo editable. Formulario “Producción”
Le asignaremos un botón de guardado que ejecutará el siguiente código en VBA:
Implementación de la base de datos
72
lxxii
Por último mostramos una imagen de la apariencia final del formulario.
Figura 7-40. Formulario “Producción”
8 CONCLUSIONES
En este último apartado presentaremos las conclusiones obtenidas tanto a nivel de trabajo como a nivel
personal.Mostraremos algunas líneas futuras que ayuden a mejorar la aplicación y ampliar el alcance de nuestro
sistema.
8.1.1 Conclusiones técnicas
A la hora de desarrollar una aplicación software es difícil establecer las condiciones de satisfacción para que el
trabajo se dé por concluido. Nuestra base de datos implementa una solución “puente” entre la entrada de datos
por base de archivos excel y mediante formularios. En el futuro se podría suprimir la entrada mediante hojas de
datos, ya que era uno de los objetivos principales de nuestro proyecto. En este punto enumeraremos algunos
cambios que podrían realizarse para mejorar nuestra aplicación y la base de datos.
a) Recopilar más datos provenientes de recursos humanos, (vacaciones, horas de baja,..), para que nuestra
aplicación pueda calcular cuándo se puede saturar el sistema. Por ejemplo, cuando hubiese muchos
trabajadores de baja, nuestra base de datos fuera capaz de determinar que áreas de fabricación se
colapsarían.
b) Podríamos generar consultas e informes sobre los mazos que se han retrasado en la entrega. Con esto
podríamos ver cuáles son los porcentajes de entrega a tiempo y en qué parte de la cadena de montaje
hay que actuar.
c) Introducir datos de más piezas de montaje, por ejemplo los conectores de los cables. Con ello
conseguiríamos una visión más amplia de la situación del taller.
d) Proponer una tabla de clientes actuales y potenciales. Con esta tabla se podrían generar informes muy
útiles para los comerciales. Por ejemplo se podría generar un informe que indicará a los comerciales
cuales son los que compran un tipo de avión en concreto. También podrían saber que clientes generan
más beneficios para la empresa, pudiendoles hacer un descuento.
e) Agregar gráficos de rendimiento por áreas. Podríamos saber que áreas producen más mazos en un
tiempo determinado. Con esta información, control de producción sabría que áreas son más productivas.
Conclusiones
74
lxxiv
8.1.2 Conclusiones personales
Este proyecto me ha resultado bastante duro, ya que no tenía muchos conocimientos de Microsoft Access. He
aprendido a manejarme en este entorno y a utilizar sus abundantes recursos.
Me encontré con algunos problemas a la hora de realizar la implementación, ya que al tener realizada parte de
la base de datos tuve que reconstruir casi por completo la implementación. Este hecho me retraso a la hora de
proponer una fecha final de entrega. Por otro lado, debido a la larga duración del proyecto, he tenido diferentes
ordenadores desde que empecé con el proyecto, a mitad de la implementación tuve que cambiar de pc. Por este
hecho he tenido que importar y exportar datos de unos ordenadores a otros y he podido comprobar que no tiene
demasiada dificultad y he aprendido a cambiar vinculaciones, anexar datos de entrada, etc. Cosas que en
principio, no tenía pensado aprender durante la realización del proyecto.
En la actualidad el trabajo que desempeño está relacionado con la programación de Microsoft Access y la
herramienta VBA. Cuando empecé este proyecto mis conocimientos sobre programación eran muy limitados,
por lo cual tuve que rehacer parte del trabajo ya elaborado.
BIBLIOGRAFÍA
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
[10]
[11]
[12]
[13]
[14]
Piñero Gómez, Jose Manuel, (2011) Diseño de Bases de datos relacionales: UF2175.
Rebecca M. Riordan, Rebecca. (2005) Diseño de bases de datos relacionales, Access y SQL Server
Viescas, John. (2007) Soluciones de Bases de datos con Access [Recurso electrónico]
Oracle Corporation (2015), MySQL. [Recurso Web]] Available: http://www.mysql.com/
López Rodrigues, Ignario. (2006) Problemas de bases de datos
Cuadra, Dolores, (2011) Desarrollo de bases de datos: casos prácticos, análisis e implementación.
Lambert, Joan ; Cox, Joyce (2013) Microsoft Access step by step
Base de Datos Relacionales, M. Celma, J.C. Casamayor, L. Mota, Pearson Prentice Hall. 2.
Apuntes asignatura: Base de Datos (2013).
Access 2010, M. Groh, ANAYA.
http://office.microsoft.com/es-ar/access/
A. Simpson, E. Olson. La Biblia de Access 97. Ediciones ANAYA. Atlanta, 1997.
Ediciones ENI. Access 2010. Barcelona, 2010.
Ediciones ENI. Microsoft Project 2007. Barcelona, 2007
Bibliografía
76
lxxvi
ANEXOS
10.1 Programación en Visual Basic.
Visual Basic se ha convertido en un importante entorno de desarrollo. Este entorno cubre todos los aspectos de
la programación profesional, desde las aplicaciones financieras a la construcción de componentes para Internet.
En la actualidad es una herramienta útil para la programación en entornos Windows, gracias a su potencia y
variedad de opciones.
10.1.1 Los objetos en Visual Basic
Los objetos están encapsulados; es decir, contienen su propio código y sus propios datos. Esto facilita su
mantenimiento más que los métodos de escritura de código tradicionales.
Los objetos de Visual Basic tienen 3 partes fundamentales: propiedades, métodos y eventos.
- Las propiedades son los datos que describen un objeto.
- Los métodos nos describen lo que puede hacer con el objeto.
- Los eventos son tareas que realiza el objeto; podemos escribir código para ejecutarlo cuando se
produzcan eventos.
En VBA, los objetos se crean a partir de clases; así, un objeto se dice que es una instancia de una clase. La clase
define las interfaces de un objeto, si el objeto es público y en qué circunstancias se puede crear.
Para utilizar un objeto tiene que mantener una “referencia a él” en una variable de objeto. El tipo de enlace
determina la velocidad con la que se tiene acceso a los métodos de un objeto mediante la variable de objeto. Una
variable de objeto puede ser un enlace en tiempo de compilación o un enlace en tiempo de diseño.
Al conjunto de propiedades y métodos se le llama interfaz. La interfaz predeterminada de un objeto de Visual
Basic es una interfaz dual que admite las formas de enlace anteriormente mencionadas. Si una variable de objeto
está correctamente definida (es decir, “Dim … As nombre_clase”), utilizará la forma más rápida de enlace.
Para tener un código VBA optimizado, es muy importante que todas las variables que se utilicen estén
debidamente definidas.
Anexos
78
lxxviii
10.1.2 Concepto de encapsulación (Public v.s. Private)
Una de las características más importantes de la programación orientada a objetos es el concepto de
encapsulación. Un objeto bien desarrollado es aquel que puede ser utilizado por otros elementos de forma
eficiente, pero sin que éstos conozcan cómo funciona internamente. Esto nos permite cambiar la forma en que
un objeto funciona sin que los elementos que utilizan el objeto noten dicho cambio.
En Visual Basic, las propiedades y métodos de una clase pueden ser de dos tipos:
Public: accesibles por cualquier elemento del proyecto.
Private: accesibles sólo por los elementos de la clase donde están definidos.
10.1.3 Utilización de variables de objeto
Utilizar una variable de objeto es similar a utilizar una variable convencional, pero con un paso adicional:
asignar un objeto a la variable.
Primero, declararemos la variable con una sentencia
Dim variable As clase
Luego, asignaremos un objeto a esa variable, utilizando la instrucción Set:
Set variable = objeto
Es muy importante haber declarado antes el objeto, ya que este ha de existir para poder ser asignado a una
variable de objeto. Es decir, previamente hemos tenido que utilizar la instrucción New, bien en la misma
sentencia en la que declaramos la variable de objeto:
Dim variable As New Clase
O podemos hacerlo en la propia sentencia Set:
Set variable = New Clase
La sentencia New crea una instancia de la clase especificada (es decir, crea un objeto nuevo a partir del modelo
que es la clase).
Cuando ya no utilicemos estos objetos, necesitamos liberar la memoria y los recursos que éstos consumen. En
la mayoría de los casos será el sistema operativo el que se encargará de esta tarea si se nos olvida a nosotros,
pero no hay que confiarse. Para liberar la memoria y los recursos que consume un objeto utilizaremos la
sentencia:
Set variable = Nothing
10.1.4 Variables estáticas
La utilidad de una variable está directamente relacionada con la forma y el lugar donde se declara. El valor
de las variables declaradas a nivel de módulo y públicas se preserva durante todo el tiempo de ejecución.
Sin embargo, las variables locales declaradas con Dim sólo existen mientras se ejecuta el procedimiento en
el cual se han declarado. La próxima vez que se ejecute el procedimiento se reinicializarán todas sus
variables locales.
Sin embargo es posible preservar el valor de una variable local si se declara como estática, utilizando la
palabra clave Static:
Static nombre_variable as tipo_dato
10.1.5 Cadenas de caracteres largas.
Cuando esté creando una cadena larga, use el carácter “&” de continuación de línea para crear
múltiples líneas de código, de forma que pueda leer o depurar la cadena fácilmente. Esta técnica
es especialmente útil cuando se muestra un mensaje por pantalla con la instrucción (MsgBox) o
un cuadro de entrada (InputBox), o cuando se crea una cadena SQL. Por ejemplo:
10.1.6 Instrucción Recordsets
Un objeto Recordset representa los registros de una tabla o los registros que resultan de ejecutar una consulta.
Existen varios tipos de Recordset, cada uno de los cuales tiene sus ventajas e inconvenientes:
De tabla: tiene acceso a la base de datos directamente, es decir, que tiene acceso a la tabla
directamente. Las búsquedas son más rápidas que con otros tipos de Recordset, pero no permite
uniones.
De instantanea: contiene una copia fija de los datos tal y como existen en el momento en el que se
accedió. Consume menos recursos que otros Recordset, por lo que puede ejecutar consultas y
devolver datos más rápidamente.
Hojas de respuesta dinámica o Dynaset: es un conjunto de referencias a los registros de una o
varias tablas. Los cambios realizados en la BBDD son automáticamente actualizados en un
Recordset de este tipo. Sin embargo, las búsquedas son más lentas ya que las acciones que se hacen
no solo se ejecutan en la memoria, si no que se reflejan a la vez en la base de datos.
Anexos
80
lxxx
Por ejemplo, para insertar un registro nuevo (Usuario=”manherber”, Contraseña=”1212” )en la tabla 'Usuarios.
Dim RsetTabla as Recordset
Set RsetTabla = VarBD.OpenRecordset(“Usuarios”,dbOpenTable)
With RsetTabla
.AddNew
!Contraseña = “1212”
!Usuario = “manherber”
.Update
End With
10.1.7 Como crear colecciones de objeto
Todos los objetos tipo “Collection” almacenan cada elemento en una variable tipo “Variant”. De esta forma,
la lista de elementos que se pueden agregar a un objeto “Collection” es igual que la lista de elementos que se
pueden almacenar en una variable tipo “Variant”.Entre ellas se incluyen los tipos de datos, los objetos y las
matrices, pero no se incluyen los tipos definidos por el usuario.
Las variables “Variant” siempre ocupan 16 bytes, independientemente de su contenido, por lo que el uso de
objetos “Collection” no es tan eficiente como el uso de matrices.
A pesar del tamaño de las variables Variant, habrá muchas ocasiones en las que nos sea útil utilizar un objeto
“Collection” para almacenar todos los tipos de datos enumerados anteriormente. Sin embargo, siempre tenemos
que tener presente que si bien los objetos “Collection” nos permitirán escribir un código limpio y fácil de
mantener, estamos pagando el precio de almacenar los elementos en variables Variant.
10.1.8 Acceder a los elementos de una colección.
Las operaciones básicas de agregar, eliminar y recuperar elementos de una colección dependen de sus claves e
índices. Una clave es un valor “String”. Puede ser por ejemplo un nombre, un número DNI, un número de la
seguridad social o un dato de tipo “Integer” convertido en tipo “String”. El método “Add” nos permite asociar
una clave con un elemento, como se describe más adelante.
Un índice es un dato de tipo “Long” que contiene el lugar de un elemento de la colección. Podemos controlar
el valor inicial del índice de un elemento mediante los parámetros “before” y “after”, pero su valor puede cambiar
si agregamos o eliminamos otros elementos.
Podemos utilizar el índice para recorrer los elementos de una colección. Por ejemplo, si insertamos el código
siguiente en el “Load” de un formulario aparecería en la pantalla “Debug” el nombre de los controles que están
pegados en él:
Dim IntContador as Integer
For IntContador = 0 To Controls.Count - 1
Debug.Print Controls(IntContador).Name & vbCrLf
Next
Existe otra forma de acceder a los elementos de una colección que proporciona un mayor rendimiento: utilizar
la sentencia “For Each”. Esta opción es notablemente más rápida que la iteración mediante índice, aunque esto
no es cierto en todas las implementaciones de colecciones: depende de cómo almacena la colección los datos
internamente. Podemos codificar de nuevo el ejemplo anterior utilizando esta sentencia:
Dim VarDato as Variant
For Each VarDato In Controls
Debug.Print VarDato.Name & vbCrLf
Next VarDato