Mostrando las entradas con la etiqueta Access. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Access. Mostrar todas las entradas

viernes, 22 de febrero de 2013

SQL para Access: filtrado y ordenación de datos

                    (P) Hugo Napoli, 2013                    


Filtrado y ordenación de datos con el motor SQL incorporado en Access.

Con Access podemos, tal como se ha visto en el anterior post sobre bases de datos, generar un espacio de trabajo en donde la información se mantenga dentro de un marco fidedigno y libre de distorsiones perjudiciales.
Se puede evitar que los datos se dupliquen, por ejemplo.
Se puede controlar el ingreso de datos, para que todos quienes utilicen las tablas para introducir información, lo hagan de una sola manera y siguiendo patrones que eviten mediocrizar la calidad de las estructuras de datos.

Pues bien, para que podamos redondear nuestro trabajo, es necesario obtener datos filtrados de la base, no solamente volcárselos sistemáticamente a modo de colección logarítmica.
Debemos poder filtrar y ordenar los datos; presentarlos en pantalla o en impresora según un criterio surgido de las necesidades originadas por una determinada situación laboral, por ejemplo.

Para una base de datos de gran cantidad de registros, existen muchos filtrados posibles:
- las personas que vivan en un barrio determinado,
- los individuos que sean mayores de edad,
- los que posean casilla de correo de gmail,
- etc.
Una manera de obtener este tipo de datos, es -en lugar de imprimirlos todos y tachar los que no correspondan, o bien copiarlos a una planilla de Excel y eliminar lo que nos resulte inútil- la utilización del lenguaje SQL, y Access posee un motor SQL para este tipo de operaciones.

SQL deriva de las siglas "Structured Query Language", o bien "Lenguaje de consulta estructurado", y sirve tanto para crear bases de datos, tablas, campos, registros y relaciones entre campos, como para modificar, agregar y eliminar todo tipo de datos, y para consultar a la base.

Esto último es lo que veremos en este momento, puesto que todo lo anterior puede hacerse con Access sin mayores problemas.

Para efectuar una consulta en lenguaje SQL, debemos tener al menos una base de datos con una tabla, que a su vez contenga algún que otro registro completo.

Una vez sorteada esta situación, procederemos a abrir la base de datos.


PASO 1: creación de la consulta.

A continuación abriremos la tabla y seleccionaremos, en el menú "Crear", la opción "Diseño de consulta".


Con esto se abrirá el asistente de selección de tablas.

PASO 2: selección de la tabla propicia.

Marcaremos la tabla que contiene los datos que deseamos ordenar y/o filtrar, pulsaremos "Agregar" y luego "Cerrar".
Si lo hemos hecho bien, la tabla quedará agregada en el espacio de consulta correspondiente, generándose una pestaña para dicho propósito, al igual que cuando se crea una relación o una tabla.
En la imagen que sigue se ve cómo se ha agregado al espacio de consulta a la tabla "Datos".


PASO 3: cambio a vista SQL.

Luego de cerrar el asistente, debemos cambiar a vista SQL.
Para ello utilizaremos el menú "Ver" y su opción correspondiente: "Vista SQL".


Ya estamos preparados para introducir el código SQL de nuestra consulta.
Debemos, antes que nada, borrar todo lo que esté escrito en el editor SQL.
Access genera, por defecto, las líneas siguientes:

SELECT
FROM Datos;


lo cual generará errores si guardamos la consulta y pretendemos ejecutarla... Hay que decirlo otra vez: ¡¡¡así es Access!!!!

PASO 4: escritura de la sentencia SQL.

El editor SQL es una especie de "bloc de notas" que responde a un motor SQL incluido en Access.
Todo lo que escribamos en él será interpretado por el motor SQL al ser ejecutada la consulta.


SELECCIONAR LOS DATOS

En este caso, solamente hablaremos de consultas de petición (o selección) de datos.
Utilizaremos al motor SQL que acompaña a Access para consultar a la base de datos, y filtrar a su vez la información.

La estructura de las consultas de petición comienza siempre así:

SELECT [nombre de los campos que queremos filtrar o visualizar]
FROM [nombre de la tabla que contiene los datos]

Un ejemplo sería el siguiente:

SELECT Nombre, Apellido, Dirección
FROM Clientes


Cuando el motor SQL encuentra a la instrucción SELECT al comienzo de una sentencia, interpreta que dicha consulta es de petición o selección de datos. Con FROM, al motor SQL se le indica el lugar desde donde levantar o extraer los datos (la tabla en donde se hallan los registros que nos interesan).


Al ejecutar la consulta de arriba, lo que sucedería sería lo siguiente:
veríamos solamente los nombres, los apellidos y las direcciones de los registros de la tabla CLIENTES.

Como se ve, si necesitamos un solo campo, escribiremos SELECT [nombre de campo], pero si los campos a visualizar son varios, los separaremos por comas utilizando sus nombres, escritos exactamente como figuran en la tabla correspondiente: SELECT Campo1, Campo2, Campo3

Si necesitáramos visualizar todos los campos existentes de la tabla, utilizaríamos un asterisco como sustituto de los nombres de los campos, es decir que con una sentencia como la que sigue

SELECT *
FROM Clientes

el motor SQL presentaría todos los campos existentes como resultado de la operación.

Pues bien: ¿qué sentido tiene el hecho de visualizar en una consulta los mismos campos que podemos ver simplemente abriendo la tabla correspondiente y observando su contenido?
La respuesta es... ¿ninguno?

Bien.
De todos modos, una sentencia SQL de petición de datos siempre comienza así, como se ha visto más arriba.
Luego, los datos pueden filtrarse y ordenarse, para que al leerlos, analizarlos o interpretarlos, el trabajo resulte más sencillo y amigable que leer una lista de 786 hojas de papel de fanfold continuo impresas por una impresora de matriz de puntos...


ORDENAR LA INFORMACIÓN

Existe la sentencia ORDER BY, con la cual podemos pedir al motor SQL que ordene los datos antes de presentarlos en pantalla.
Si quisiéramos presentar los datos en ordena alfabético de la A a la Z, por ejemplo, sólo necesitamos introducir las líneas descritas arriba, seguidas por un ORDER BY [campo de referencia]:

SELECT *
FROM Clientes
ORDER BY Apellido

Esto presentaría todos los datos (debido a la existencia de un asterisco en la sentencia) de la tabla Clientes, ordenados por apellido, de la A a la Z.
Si quisiéramos ordenar los datos por nombre del cliente en lugar de hacerlo por apellido, escribiríamos:

SELECT *
FROM Clientes
ORDER BY Nombre

NOTA IMPORTANTE: el comando ORDER BY, siempre debe ser colocado al final de la sentencia SQL.

FILTRAR LA INFORMACIÓN

Para el filtrado existe WHERE, la palabra clave que le indica al motor SQL que deberá cumplirse una condición determinada para que la consulta tenga efecto. Para quien recuerde el funcionamiento de la función SI de Excel, diremos que esto funciona de modo muy similar a como sucede en dicha función.
WHERE siempre va colocado antes que ORDER BY. Observemos la siguiente estructura:

SELECT [campo/s]
FROM [tabla]
WHERE [condición]
ORDER BY [campo]

Un ejemplo podría ser el siguiente:

SELECT *
FROM Clientes
WHERE Edad = 25
ORDER BY Apellido

Esta consulta mostraría todos los registros de la tabla Clientes, siempre y cuando en el campo edad de cada uno se halle la cifra 25, y lo ordenaría alfabéticamente.

La sentencia WHERE, admite los operadores lógicos AND (y) y OR (o), < (menor), <= (menor o igual), > (mayor), >= (mayor o igual), = (igual), <> (diferente), y otros...

SELECT *
FROM Clientes
WHERE Edad <> 25
ORDER BY Apellido

Existe también el comando NOT, que sirve para negar.
Del mismo modo que le decimos al motor SQL "los diferentes a 25" (Edad <> 25), también podríamos decirle "los que NO sean de 25" (WHERE NOT Edad = 25):


SELECT *
FROM Clientes
WHERE NOT Edad = 25
ORDER BY Apellido


El ejemplo anterior, y este último, hacen exactamente lo mismo: mostrar todos los clientes que NO TENGAN 25 años, ordenados por apellido.

SELECT *
FROM Clientes
WHERE Edad > 25
ORDER BY Apellido

Muestra los clientes mayores de 25 años, ordenados por apellido.

Pero no solamente pueden filtrarse datos en función de una cuestión numérica.
Puede trabajarse también con texto, es decir, con datos alfanuméricos.
Si quisiéramos, en lugar de trabajar con edades, hacerlo con zonas, podríamos hacer lo siguiente:

SELECT *
FROM Clientes
WHERE Zona = Norte
ORDER BY Apellido


Esta sentencia, si bien en lo imaginario se corresponde con el sentido común y en apariencia debería funcionar a la perfección, encierra un par de errores de sintaxis.

Dichos errores se han resaltado con color rojo, y su corrección será explicada a continuación.


1. Cuando trabajemos con cadenas de texto (palabras, valores alfanuméricos, etc.) es conveniente  utilizar el comando LIKE en lugar del signo de igual. Si bien de las dos maneras se obtiene el mismo resultado, a la larga uno se organiza mejor si utiliza un procedimiento diferente al trabajar con cadenas de texto o datos alfanuméricos. En el ejemplo de arriba se ha visualizado la sentencia SQL utilizando el signo de igual, y en el siguiente se puede ver la misma sentencia, utilizando el operador LIKE.

SELECT *
FROM Clientes
WHERE Zona LIKE Norte
ORDER BY Apellido

2. Si queremos que el motor SQL realice comparaciones entre cadenas de texto, encerrémoslas entre comillas:

SELECT *
FROM Clientes
WHERE Zona LIKE "Norte" [esta línea puede sustiruirse por WHERE Zona = "Norte"]
ORDER BY Apellido


DOBLE FILTRADO: BÚSQUEDA DE PALABRAS



Es posible que tengamos que buscar o extraer ciertos datos antes de realizar el filtrado.
Por ejemplo, ¿qué sucedería si queremos obtener únicamente los números telefónicos de un determinado barrio?
Para filtrar los números telefónicos del Centro de Montevideo, deberíamos poder presentar en pantalla todos aquéllos que comiencen con 290, por ejemplo, sin importar el resto de los números que compongan la cadena total.
Esto es posible gracias a un artilugio que le dice al motor SQL que no se fije en ciertos caracteres al realizar el filtrado.
¿Cómo funciona esto?
Utilizando el asterisco en el lugar o los lugares que queremos despreciar.
Observemos los siguientes números telefónicos y visualicemos cuáles son las únicas cifras que los hacen pertenecer a la misma zona.

29017575
29014646
29005858
29021717
29002121
29024343


Dado que la característica zonal es la misma en todos (290) y que por lo tanto podríamos despreciar al resto de las cifras que siguen al 290, sustituiremos a todas esas cifras por un sólo asterisco, de este modo: 290*

¿Y cómo se logra transmitirle eso mismo al motor SQL?
Del mismo modo que en los últimos ejemplos de código SQL:


SELECT *
FROM Clientes
WHERE Teléfono LIKE "290*"

En este caso, el motor mirará únicamente si las cifras comienzan con 290 y despreciará el resto, por lo tanto, la consulta SQL desplegará todos los números que ya hemos citado anteriormente:


29017575
29014646
29005858
29021717
29002121
29024343

¿Y si necesitamos saber qué teléfonos terminan con 5?
Podemos cambiar al asterisco de lugar:


SELECT *
FROM Clientes
WHERE Teléfono LIKE "*5"



Esto significa que el motor despreciará toda cifra que haya antes del 5, y sólo observará al 5 como cifra final, devolviendo únicamente este número:

29017575

¿Y si la cadena de texto buscada está en el medio de la palabra, como por ejemplo, buscar "mar" dentro de "Amaral"?
Pues bien; si la cadena de texto buscada está justo en medio de la palabra, o bien si se desconoce exactamente en qué posición dentro del texto se hallará, se pueden utilizar dos asteriscos:
Para el ejemplo de búsqueda de la cadena de texto "mar" dentro de la palabra "Amaral", el planteamiento SQL se haría de la siguiente manera:


SELECT *
FROM Clientes
WHERE Nombre LIKE "*mar*"

Este ejemplo devolverá todos los nombres que contengan la palabra "mar" dentro de sí, y será válido tanto como para los que comienzan con "mar", como "Marcela", para los que contienen "mar" en medio de la palabra, como "Amaral", como para los que culminan con "mar", como "Omar".


Del mismo modo pueden extraerse todos los clientes que posean direcciones de correo del servidor gmail,


SELECT *
FROM Clientes
WHERE Correo LIKE "*gmail*"

los de yahoo,

SELECT *
FROM Clientes
WHERE Correo LIKE "*yahoo*"


los de hotmail,


SELECT *
FROM Clientes
WHERE Correo LIKE "*hotmail*"

etc.


En el post sobre Access está disponible la descarga de una base de datos en donde podrás encontrar todas estas consultas SQL ya resueltas.

Espero que la información te haya sido útil.

Gran abrazo.



miércoles, 12 de diciembre de 2012

Guía rápida de Access 2010 (aplicable a otras versiones de Access y a LibreOffice Base)

                    (P) Hugo Napoli, 2012                    


Guía rápida "paso a paso" de empleo de MS Access para crear bases de datos.


I. Creación de la base de datos.

1. Abrir Access, seleccionar "Base de datos en blanco" y darle nombre al archivo que estamos creando. El nombre podría ser, por ejemplo, "Base de datos de prueba".

2. Darle una ubicación al archivo, dentro del árbol de directorios del Sistema. Una ubicación a modo de ejemplo, podría ser el Escritorio.
NOTA IMPORTANTE: una vez definida la ubicación, no es conveniente mover la base de datos hacia otro lugar, puesto que hay veces en las cuales Access pierde la referencia lógica de la ubicación de los archivos, y ya no puede volver a abrir la base de datos (!)

En la imagen se pueden apreciar 3 cosas importantes a tener en cuenta.
1. "Base de datos 1.accdb" - Es el nombre que le estamos dando al archivo de base de datos.
Hay que recordar que el nombre debe ser significativo, a efectos de no perder tiempo y malgastar esfuerzos en tratar de encontrar una base de datos entre 15 que tengan nombres parecidos, tales como "Base de datos1.accdb", "Base de datos2.accdb", "Base de datos3.accdb", "Base de datos", "Base", etc.
Al menos una palabra en el nombre del archivo debe indicar su contenido. Ejemplos de ello podrían ser: "Librería", "Farmacia", "Base clientes", "Teléfonos", "Agenda en Access"...
2. "C:\Users\Hugo\Documents\" es el lugar exacto dentro del sistema de directorios de Windows, en este caso, en el cual reside la base de datos. Para volver a abrirla, ya sabemos que si entramos al ícono "Mi PC" (en Windows XP), o a "Equipo" (Windows Vista, 7 y 8), y luego entramos al disco "C:", al directorio "Users", al usuario "Hugo" y finalmente al directorio "Documentos", allí encontraremos a nuestra base de datos.
3. Para abrir el navegador de directorios de Windows y de ese modo dar una ubicación a nuestra base de datos (tal como se comenta en el punto 2), debemos pulsar esa pequeña carpeta amarilla que allí se ve.


II. Creación de tablas y personalización de campos.

3. Por último, al hacer clic en el botón "Crear", Access mostrará una tabla ya lista para introducir datos en ella.

4. Deben definirse, en primer lugar, las propiedades de los campos, es decir, el nombre y el tipo de cada uno de ellos. Si bien esto puede simplificarse abriendo nuevos campos con la opción texto desde la "Vista normal", recordemos que, en cuanto la tabla posea datos, esto será difícil de cambiar.
El hecho de generar campos con el formato texto por comodidad, puede llevarnos a problemas grandes una vez que comencemos a volcar datos a la tabla.
Esta es una opción válida siempre y cuando la tabla no contenga datos, o cuando sepamos que únicamente necesitamos campos con ese formato.
El nombre de los campos puede ser arbitrario, y los tipos de campo más utilizados son:
- Texto (alfanumérico: letras, números tratados como texto y símbolos). Admite cualquier tipo de caracter, como se puede apreciar.
- Número (únicamente números y signos matemáticos). Admite números, signos matemáticos de representación de cifras (+ y -), y en ocasiones, letras de la A a la E para notación hexadecimal.
- Moneda (admite cifras expresadas en los formatos financieros convencionales). Un buen ejemplo podría ser el siguiente: U$S 14,55
- Fecha y hora (admite fechas y horas en los formatos convencionales). Un ejemplo: 14/10/2016 18:36:22 PM
- Sí/No (para valores booleanos). Es comúnmente utilizado al llenar datos en una planilla que comprende los siguientes cuestionamientos: ¿Fuma? ¿Tiene hijos? ¿Es mayor de edad? En lugar de estar escribiendo "Sí" y "No" hasta el cansancio, es conveniente formatear dicho campo como "Valor booleano", lo cual simplificará enormemente las cosas. 
- Hipervínculo (para direcciones web o de correo electrónico). Convierte a hipervínculo todos los datos del campo, para que, al hacerle clic con el ratón, el Sistema Operativo abra el navegador por omisión (Google Chrome, Mozilla Firefox, Internet Explorer, ...) con la página web indicada. Si en este campo introducimos "http://www.google.com.uy" entonces, al hacer clic sobre esa cadena de texto, el Sistema abrirá el navegador en la página de Google Uruguay.

Aquí se puede apreciar cómo con un simple clic izquierdo -en Office 2010- Access muestra las posibles propiedades de tipo de campo admitidas. En Office 2007 esto no funciona así. El campo es creado con el valor por omisión o defecto (generalmente "Texto"), y solo en "Vista Diseño" es que este valor podrá ser alterado.

Para trabajar con mayor seguridad, esto debe hacerse empleando el modo de diseño.
Para ello hay que seleccionar el menú "Inicio", y dentro de la cinta, hacer clic sobre el indicador desplegable del botón "Ver", opción "Vista Diseño".
Los campos estarán orientados horizontalmente, a diferencia de como aparecen en la vista de hoja de datos (vista normal).
En la columna "Nombre del campo", escribiremos los nombres de cada campo, y en la columna "Tipo de datos", seleccionaremos -para cada uno de los campos- el tipo correspondiente, según la clase de datos que ese campo vaya a contener.
Por esta razón es que resulta conveniente organizarse antes de construír en Access. Tener pensado o diagramado un pequeño esbozo o bosquejo del proyecto a llevar a cabo no está nada mal.

5. Luego de finalizar con esa tabla, debemos guardarla y cerrarla, y a continuación darle el nombre que corresponda. Mientras la tabla esté abierta, Access no nos permitirá cambiarle de nombre, y -NOTA MUY IMPORTANTE- si no la guardamos antes de cerrarla, la perderemos (!)
Para guardarla, basta con hacer clic derecho sobre la pestaña identificadora de la tabla, y elegir la opción "Guardar", y para cerrar la tabla, hacer clic derecho sobre la misma pestaña identificadora de la tabla, y elegir la opción "Cerrar".


Aquí se muestra el procedimiento que es conveniente mecanizar para evitar inconvenientes: tras cada modificación: guardar la tabla. Antes de cerrar, guardar. Esto, por practicidad, es bueno hacerlo siempre "cliqueando" el botón derecho del ratón sobre la pestaña de la tabla en cuestión, como aquí se ve.
En el segundo paso, se debe aprovechar la ocasión que nos da Access para darle un nombre más significativo a la tabla. Otra opción para realizar el cambio de nombre es, con la tabla guardada y cerrada, hacer clic en dicha tabla en la zona de la izquierda y escoger la opción "Cambiar nombre".

6. Para crear nuevas tablas, haremos clic en el menú "Crear" y seleccionaremos, en la cinta, la opción "Tabla".
Repetiremos desde el paso 4 hasta el 6, hasta que hayamos finalizado nuestra construcción.


Si posicionamos el puntero del ratón sobre cualquier botón de Access y lo dejamos en reposo durante unos segundos sin moverlo ni pulsar ningún botón, observaremos que aparecerá una pequeña ventana emergente de ayuda, dándonos breves descripciones de lo que sucedería si escogiésemos esa opción.


III. Relaciones entre campos (1): jerarquización de la información.

Antes de continuar, debemos establecer criterios importantes para evitar trabajar incansablemente en cuestiones fácilmente automatizables.

Existen las tablas principales y las secundarias.
La principal, es la más importante de nuestro proyecto.
En una base de datos de una biblioteca, la tabla principal será la que agrupe los datos generales de los libros (ficha del libro), pero las secundarias sólo poseerán datos particulares de los mismos (la tabla de la ficha de los autores, la de las editoriales, la de los países de origen del libro, la de ubicación en la estantería, la de cantidades, la de encuadernaciones, etc.).

Ciñéndonos a estos criterios, primero debemos llenar los datos de las tablas secundarias, y al final, los de la principal (sirviéndonos a su vez de las secundarias).
Esto significa que es imposible ingresar un libro en la tabla principal si aún no se ha ingresado su autor en la tabla secundaria.
Si en mi base de datos sólo tengo a Gabriel García Márquez, solamente podré ingresar libros de ese autor. Si me llega uno de Juan Carlos Onetti, deberé ingresar a Onetti en la tabla de autores en primer lugar, y, acto seguido, ingresar todos los libros de ese autor al Sistema.
Por ello es que las tablas secundarias deben llenarse antes, y la principal, por último.


IV. Definición de índices

Hay un elemento crucial a tener en cuenta.
Todas las tablas deben poseer un índice para que la búsqueda automatizada dentro de ellas pueda efectuarse de manera segura, fiable.
El índice es comúnmente generado por Access, y nosotros nos limitamos a introducir datos dejando que ese índice numérico interno aumente en la medida de la cantidad de registros que haya en las tablas, y esta es una excelente técnica.
Nunca debemos eliminar ese campo "Id" que Access genera automáticamente, aún en el caso hipotético de no necesitarlo. Siempre conviene dejarlo automatizado y controlado por Access.
Mas, si de todos modos, necesitamos establecer otro tipo de índice para nuestras tablas, podemos hacerlo sencillamente indicándole a Access que el índice estará constituído por el campo tal o cual, y no por el Id interno.
El Id, entonces, seguirá obrando del mismo modo, es decir, incrementándose en la medida en que los registros aumenten, pero ya Access no dirigirá su atención a ese campo, sino al que nosotros hayamos indicado.
Pues bien, ¿cómo se cambia el índice?
O en otras palabras, ¿cómo se desplaza el índice hacia otro campo?

7. Para esto debemos abrir o seleccionar la tabla en cuestión y cambiarnos a la vista de diseño (clic en el botón "Ver", opción "Vista Diseño").
Aparecerá entonces, inmediatamente a la izquierda del campo Id generado por Access, una pequeña llave, indicando que ese es el campo que corresponde al índice.
Si hacemos clic derecho en cualquier otro campo, entre las opciones que aparecerán en el menú contextual, estará "Clave principal", la cual, al ser seleccionada, hará que la llave se cambie a otro campo.


En la imagen se muestra cómo Access define el índice o campo maestro. La llave indica que el índice de esa tabla reside en el campo "Id". Por omisión, Access siempre crea un campo indizado y automatizado llamado "Id", el cual no conviene eliminar aunque aparentemente no sea necesario en nuestro proyecto. Esto solamente se ve en la "Vista Diseño", en donde también se puede cambiar.



V. Relaciones entre campos (2): fidelidad en el tratamiento de la información.

De nada sirve, en el mundo de las bases de datos, el hecho de repetir el mismo dato en más de una tabla.
Por ejemplo, el título de un libro sólo debe aparecer en la tabla "Títulos", pero no en la tabla "Autores".
Ahora bien, ¿cómo "sabe" Access qué títulos corresponden a cada autor?
Esa relación entre títulos y autores, automóviles y marcas, nombres y números telefónicos, se logra relacionando campos.
Relacionar el título de un libro con su autor, es enlazar el campo "Título" de la tabla "Libros" con el campo "Autor" de la tabla "Escritores", por ejemplo.
Por este motivo es que en la tabla correspondiente a los autores generalmente no aparece ningún título, y viceversa: porque hay un modo de no repetir información, y ese modo es el de relacionamiento entre campos, o entre tablas, lo cual es casi lo mismo.

NOTA IMPORTANTE: no es posible establecer relaciones entre campos de distinta naturaleza, como por ejemplo, el campo "Id" (numérico) de la tabla de títulos, con el campo "Nombre_Editorial" (alfanumérico) de la tabla de editoriales.
Tampoco pueden relacionarse campos que no contengan clave principal, es decir, al menos un campo debe tener clave principal para poder relacionarse con otro.
Por ello es que es necesario, en ocasiones, cambiar la clave principal de alguna que otra tabla.

8. Debemos guardar y cerrar las tablas entonces, y a continuación, seleccionar el menú "Herramientas de base de datos", y en la cinta, hacer clic en "Relaciones", tal como se muestra en la siguiente figura.


Access abrirá un pequeño panel conteniendo todas las tablas de nuestro proyecto. El panel es el que se muestra en la siguiente imagen.

NOTA: si en algún momento cerramos este panel y necesitamos abrirlo nuevamente, solo hay que hacer clic derecho en un lugar vacío en el espacio de relaciones y seleccionar "Mostrar tabla".

Seleccionaremos la primera tabla haciendo clic en el renglón correspondiente y pulsando el botón "Agregar". La tabla seleccionada quedará visible detrás de nuestro panel.
Luego haremos lo mismo con la segunda, la tercera, etc., hasta que todas hayan quedado incluidas en la sección "Relaciones" (detrás del pequeño panel).
Al finalizar, presionaremos el botón "Cerrar", y el panel desaparecerá. Nuestras tablas ya están listas para efectuar en ellas las asociaciones necesarias.


Las relaciones se establecen, sencillamente, haciendo clic izquierdo en uno de los campos de una tabla cualquiera, y sin soltar el botón izquierdo del ratón, arrastrando el puntero hasta el campo de la tabla que sea.
Al soltar el ratón, aparecerá un pequeño panel en donde podremos establecer ciertos atributos a esa relación (ver siguiente imagen).


Aún existiendo en esta sección más opciones que estas a las cuales haré referencia, es importantísimo comprender estas tres fundamentales.


1. Exigir integridad referencial: indica que no podrán establecerse relaciones entre campos vacíos.

En la ficha general del libro, se muestra su autor. Pero si en la tabla de autores, no existe el apellido del autor del libro... ¿cómo es posible presentar esa información a un lector, por ejemplo?
Para que esto no suceda, debe marcarse esta casilla, de modo que Access no permita que un libro esté vinculado a un campo vacío de la tabla de autores.
Si esta casilla está marcada y se pretende ingresar un libro sin autor, Access mostrará una advertencia e impedirá el ingreso de la información hasta que esta se introduzca como corresponde.
Hay que recordar que si las tablas están abiertas, no será posible relacionarlas. ¡Así es Access!
Y no olvidemos guardarlas antes de cerrarlas ¡Así también es Access!

2 y 3. "Actualizar en cascada..." y "Eliminar en cascada" los registros seleccionados: estas dos opciones deben ser marcadas por un tema de orden y control de la base de datos.
"En cascada", significa "en grupo", "en bloque", "en conjunto".
Si estamos trabajando con la base de datos de una empresa, y eliminamos a un cliente de la tabla títulos, lógicamente querremos que el resto de sus datos sean eliminados de las tablas secundarias, si es que existen.
Lo mismo sucederá si se ha ingresado un nombre con faltas de ortografía y a alguien se le ocurre corregir esto, o bien si algún cliente ha cambiado su dirección y número telefónico y hay que actualizar esos datos.
Si estas opciones no están marcadas, estaremos eliminando al cliente de la tabla principal, pero dejando información huérfana en el resto de las tablas, y en el caso de modificación de la información, estaremos modificando en una sola tabla, pero no en el resto. Y no querremos trabajar "a ojo"... ¿o sí?
Para mantener una base de datos en buen estado de integridad, estas opciones deben ser tenidas en cuenta.

VI. Errores frecuentes

IMPORTANTE: Hay errores característicos para los cuales es mejor estar preparados antes que surjan. En el relacionamiento de campos es cuando más surgen, así que, no desesperes, trata de comprender la mecánica del programa, y si algo sale mal, revisa todos los pasos que has dado, a ver en cuál tropezaste. Si aún siguen las cosas mal, elimina el campo que esté en conflicto y créalo nuevamente. Si aún así sigue mal, elimina la relación, o hasta la tabla que creas que ocasiona el problema y reconstrúyela... y si luego de todo ello sigues con un error contra el cual no puedes lidiar... comienza desde cero... no hay otra alternativa además de abandonar el proyecto.

ERROR MÁS FRECUENTE: la tabla está en uso y no se puede renombrar/relaciuonar/eliminar/etc.
SOLUCIÓN: guarda y cierra la tabla, y luego prosigue tu tarea.

ERROR COMÚN: estás tratando de relacionar dos tipos de campo de diferente naturaleza.
SOLUCIÓN: redefine el tipo de los campos que estás necesitando relacionar, para que ambos sean del mismo tipo: moneda con moneda, fecha con fecha, texto con texto, booleano con booleano, etc.

ERROR MENOS FRECUENTE: intentas relacionar un campo no indizado con otro cualquiera.
SOLUCIÓN: cambia la "llave" (en modo Diseño) y sitúala en el campo que corresponda de la tabla secundaria.

Al finalizar, habrá quedado alguna línea (o algunas líneas) dibujada entre las tablas, indicando que la tabla 1 se relaciona con la tabla 2 a través de los campos x e y, por ejemplo.
Esas líneas visibles son las relaciones lógicas.
Basta con hacer doble clic sobre la línea (teniendo buena puntería) para modificar la relación, o con hacerle clic derecho para que aparezcan más opciones en un menú contextual emergente, como por ejemplo "Modificar relación" o "Eliminar relación".


NOTA 1: las relaciones aparecerán en la base de datos como una pestaña más junto a las tablas.
Trataremos a esta pestaña como a cualquier pestaña de cualquier tabla: hay que guardarla antes de cerrarla, para que no se pierda.



NOTA 2: si hemos incluido por error una tabla con la cual no nos interesaba trabajar, haremos clic derecho sobre ella y seleccionaremos "Ocultar". Esto no borra la tabla de nuestro proyecto, ni elimina las relaciones efectuadas sobre ella. Solamente la quita del espacio de "Relaciones".



VII. Complementos (1): DEFINICIONES Y NOTAS.

- "Campo" es el grupo (generalmente es una columna) que nuclea o contiene datos del mismo tipo.
Un nombre de campo, entonces, nunca estará conformado por un elemento, sino por un nombre abarcativo o de grupo.
Por ejemplo, en el grupo de elementos siguiente: Uruguay, Cuba, Canadá, Italia, Egipto, China y Australia, el nombre de campo debería ser "Países".
En el grupo de elementos: Mabel, Martha, José, Susana, Jéssica y Antonio, el nombre de campo debería ser "Nombres de pila", por ejemplo.

- "Registro" es una combinación de campos. Por ejemplo: Susana de Uruguay, Antonio de Italia, José de Cuba, etc.

- "Tabla" es el lugar en donde se organiza la información de ciertos campos y ciertos registros.
Por ejemplo, puede existir una tabla llamada "Clientes" que contenga los siguientes campos: Número de cliente, Nombre, Apellido, Dirección, Teléfono y Correo electrónico.
Entonces un registro, en ese mismo orden, estaría compuesto por estos datos:
001, Marcos, Viera, 18 de Julio 915, 29011414, marcos.viera@gmail.com

"001", corresponde a un registro parcial del campo "Número de cliente".
"Marcos", corresponde a un registro parcial del campo "Nombre".
"Viera", corresponde a un registro parcial del campo "Apellido".
"18 de Julio 915", corresponde a un registro parcial del campo "Dirección".
"29011414", corresponde a un registro parcial del campo "Teléfono".
"marcos.viera@gmail,com", corresponde a un registro parcial del campo "Correo electrónico".

"001", "Marcos", "Viera", "18 de Julio 915", "29011414", "marcos.viera@gmail.com", corresponde a todo un registro completo de la tabla "clientes".

- "Base de datos" es un archivo como cualquier otro, salvo que en lugar de encerrar fotogramas, texto formateado, música o vídeo, contiene únicamente datos compuestos por letras y números.
Una base de datos es un archivo del tipo mencionado (no tiene por qué tratarse de una base de datos de Access precisamente), y que tiene dimensiones no demasiado concretas.
Su tamaño cambia con el tiempo, por lo tanto, es de dimensiones dinámicas, nunca fijas.
Cada vez que creamos una base de datos en blanco, es como si le dijésemos al Sistema Operativo "Resérvame un espacio indefinido en el disco duro para ir volcándole datos de a poco".
Una base de datos, generalmente contiene varias tablas, las cuales, en gran cantidad de oportunidades, están vinculadas entre sí mediante algún o algunos campos.
Esto equivale a decir que una base de datos, generalmente no es una colección de tablas "muertas", puesto que están relacionadas entre sí de algún modo.
Esta relación se establece de forma manual. Access no puede construírla  automáticamente.


VIII. Complementos (2): MATERIAL MULTIMEDIA.

En el siguiente vídeo, se explica claramente todo esto que ha sido comentado arriba.
El mismo ha sido tomado de YouTube, y su URL es la siguiente:
Desde ya, se agradece el valioso aporte del autor del mismo ("asuareznet").


En el resto de los vídeos que siguen, se verán algunos aspectos ya trabajados en esta entrada, y habrá algunos nuevos aportes que serán complementarios.

Creación de bases de datos y tablas, gentileza del autor Otto Javier González.


Creación de informes, gentileza de aulaclic.


Creación de consultas, gentileza de aulaclic.


Creación de formularios, gentileza de cursomatica.


Introducción a las macros, gentileza del autor Otto Javier González.


Introducción a los "módulos" de Visual Basic for Applications (lenguaje de programación llamado "Visual Basic" adaptado para crear pequeñas pero potentes aplicaciones dentro de Excel y Access, por ejemplo).
Gentileza del autor: Víctor Hugo Ayala Cañedo.




IX. Complementos (3): funcionamiento de SQL.

Existe, en este mismo blog, una entrada especialmente dedicada a SQL.
Allí podrás aprender cómo hacer consultas directamente a la base de datos, sin pasar por Access, por ejemplo. También, verás cómo utilizar el motor SQL incorporado de Access.

Para leer dicho artículo, haz clic aquí.


X. Complementos (4): ejercicios resueltos SQL.

Puedes descargar una base de datos de prueba en formato Access 2007-2010 con 13 consultas SQL de distinto tipo ya resueltas.

Para ello haz clic aquí.