Tabla

Consulta

Formulario Informe Macro Código Active X

Temas generales

Volver a selección

Establecer criterios en una consulta
Crear una consulta de parámetros que devuelve los datos según el parámetro o en su defecto todos
Establecer el parámetro de búsqueda por parte de una palabra
Personalizar el cuadro de dialogo que pide los criterios o parámetros
Unir dos tablas no relacionadas a través de una consulta de Unión
Establecer un criterio predefinido en una consulta de Unión
Que la consulta de Unión muestre registros duplicados
Acumular totales en una consulta
Crear una consulta como origen de un combobox y que muestre el registro N/A
Crear una nueva tabla mediante una consulta SQL con definición de tipos de datos
Contar registros en una consulta
Buscar el valor mínimo o máximo de una tabla mediante una consulta
Evitar los mensajes de confirmación en las consultas de Acción

Crear una fila Total para consultas de tabla de referencias cruzadas
Registros duplicados
Calcular edad en una consulta

 

 

 

 

 

 

 

 

 

 

 

 

Establecer criterios en una consulta Ir arriba

Como sabemos una consulta te permitirá seleccionar registros de una o mas tablas a partir de las condiciones que establezcas en la fila criterios.

Como ejemplo utilizaremos la tabla de Cts, con los siguientes campos: FechaRevision, Subestación

  1. Si quieres filtrar la información por una cierta fecha, en el criterio del campo FechaRevision escribe:
  2. [Introduce la fecha de revisión]

  3. Si quieres filtrar la consulta por un rango de fechas, en el criterio del campo FechaRevision escribe:
  4. Entre [Introduce la Fecha de Inicio:] Y [Introduce la Fecha de Fin:]

  5. Si quieres filtrar la consulta además de por un rango de fechas (como en caso b), por Subestación, escribe además en el criterio del campo Subestación lo siguiente:

[Introduce la subestación:]

De esta manera podrás jugar con los criterios de cada campo de manera que el resultado de tus consultas será filtrado por los criterios que establezcas.

 

Crear una consulta de parámetros que devuelve los datos según el parámetro o en su defecto todos Ir arriba

Cuando creas una consulta de parámetros tienes que indicar los parámetros para que la consulta te devuelva algún registro. Si no indicas un parámetro, la consulta no te mostrará registro alguno.

Una manera de evitar esto es que al no indicar parámetro alguno, la consulta te muestre todos los registros.

  1. Una alternativa es que si escribes "*" como criterio la consulta te devuelve todos los registros:
  2. 'Como [Introduce la subestación]'.

  3. Si quieres que te muestre todos los registros cuando no escribes un parámetro, establece el criterio de la siguiente forma "Como  iif(isnull([Introduce la subestación]);"";[Introduce la subestación])

 

Establecer el parámetro de búsqueda por parte de una palabra Ir arriba

Si estableciste un criterio deberás escribir el nombre exacto para que la consulta te devuelva el registro o registros buscados. Caso contrario al no existir el registro que concuerde con el parámetro mal escrito te devolverá 0 registros.

Para evitar esto y que te devuelva registro que concuerdan total o parcialmente con el parámetro escrito deberás escribir en el criterio del campo parametrizado lo siguiente.

Como "*" & [Introduce la subestación] & "*"

 

Personalizar el cuadro de dialogo que pide los criterios o parámetros Ir arriba

Si ya estableciste criterios de parámetros en tu consulta observarás que el cuadro que solicita los datos es un cuadro predefinido de Access. Este cuadro puedes personalizarlo creando un formulario tipo diálogo y referir los parámetros a ese formulario. Veamos como se hace:

  1. Supongamos que tu consulta es una consulta de la tabla Cts y utilizaremos el campo FechaRevision y Subestación el parámetro establecido es sobre el campo FechaRevisión así: Entre [Introduce la Fecha de Inicio:] Y [Introduce la Fecha de Fin:]
  2. Crea un formulario llamado por Ej. Criterios, e inserta dos cuadros de texto independientes y formato Fecha (Igual formato que la del campo FechaRevision de la consulta) y les das el nombre de  FechaInicial y FechaFinal
  3. Reemplaza el criterio que tienes po el siguiente:

Entre [Forms]![Criterios]![FechaInicial] Y [Forms]![Criterios]![FechaFinal]

Ahora cuando ejecutes el formulario e insértes los datos en los cuadros de texto se abrirá tu consulta conforme las fechas establecidas.

 

Unir dos tablas no relacionadas a través de una consulta de Unión Ir arriba

Si tuvieras dos tablas que no están relacionadas, pero tienen campos total o parcialmente iguales y deseas verlos juntos, la solución es a través de una consulta SQL de Unión.

Supongamos las tablas Clientes y Proveedores, donde los campos que concuerdan son: Nombre, Contacto, Cargo, Ciudad, País, CP, y Telf

La forma de unir estas dos tablas será mediante la consulta de unión que tendrá la siguiente instrucción SQL:

SELECT [Nombre], [Contacto], [Cargo], [Ciudad], [País], [CP], [Telf]

FROM [Clientes]

UNION SELECT [Nombre], [Contacto], [Cargo], [Ciudad], [País], [CP], [Telf]

FROM [Proveedores]

ORDER BY [Nombre];

Ahora tus dos tablas serán unidas y ordenada por Nombre (ORDER BY)

 

Establecer un criterio predefinido en una consulta de Unión Ir arriba

Si quisieras establecer algún criterio en tu consulta de unión, podrás hacerlo introduciendo la cláusula WHERE en la instrucción SQL:

SELECT [Nombre], [Contacto], [Cargo], [Ciudad], [País], [CP], [Telf]

FROM [Clientes]

WHERE [País] = "España"

UNION SELECT [Nombre], [Contacto], [Cargo], [Ciudad], [País], [CP], [Telf]

FROM [Proveedores]

WHERE [País] = "España"

ORDER BY [Nombre];

Ahora tus dos tablas serán unidas y ordenada por Nombre (ORDER BY), mostrándote sólo los Clientes y Proveedores de España.

 

Que la consulta de Unión muestre registros duplicados Ir arriba

Supongamos el ejemplo donde un cliente es a la vez Cliente y Proveedor. Para este caso se utiliza la cláusula ALL

SELECT [Nombre], [Contacto], [Cargo], [Ciudad], [País], [CP], [Telf]

FROM [Clientes]

WHERE [País] = "España"

UNION ALL SELECT [Nombre], [Contacto], [Cargo], [Ciudad], [País], [CP], [Telf]

FROM [Proveedores]

WHERE [País] = "España"

ORDER BY [Nombre];

 

Acumular totales en una consulta Ir arriba

Supongamos que tienes una consulta cuyo origen es la tabla Ventas, que te muestra los campos IdCliente, Nombre Cliente, Cantidad

Si quisiera que la misma te mostrara el Acumulado de Cantidad deberás insertar un nuevo campo independiente en la consulta que será:

Acumulado: Formato(DSuma("Cantidad";"Ventas";"[IdCliente]<=" & [IdCliente] & "");"$0.000,00")

De esta manera el campo Acumulado te mostrará el acumulado de Cantidad.

 

Crear una consulta como origen de un combobox y que muestre el registro N/A Ir arriba

Supongamos que tienes un Cuadro de Lista Combinado en el formualrio Clientes, que te lista las Provincias de tu país, y requieres un registro N/A (No Aplicable) para un cliente del exterior .

En tal caso vamos a crear una consulta que inserte el registro N/A y que será el origen de tu combobox:

SELECT IdProv, Provincia

FROM tblProvincia

UNION SELECT "","<N/A>"

FROM tblProvincia

ORDER BY Provincia;

 

Crear una nueva tabla mediante una consulta SQL con definición de tipos de datos Ir arriba

Puedes crear una nueva tabla mediante una consulta SQL de Definición de Datos.

Supongamos que quieres crear una tabla de Clientes con los siguientes campos: IdCliente (Autonúmerico e Indice), Nombre (Texto 30 e Indexado sin Duplicados), Dirección (Texto 50), Ciudad (Texto 30), Provincia (Texto 30), CP (texto 4)

CREATE TABLE tblClientes

(IDCliente AutoIncrement CONSTRAINT PrimaryKey PRIMARY KEY,

CompanyName TEXT (30) CONSTRAINT CompanyName UNIQUE,

Dirección TEXT (50),

Ciudad TEXT (30),

Provincia TEXT (30),

CP TEXT (4));

 

Contar registros en una consulta Ir arriba

Si quisieras contar los registros de una consulta puedes hacerlo mediante una pequeña instrucción SQL:

SELECT (SELECT COUNT(*)FROM Clientes) -

(SELECT COUNT(*)FROM Cliente a1

WHERE (a1.ds_Cliente) > (a2.ds_Cliente)) AS sequencial,

ds_Cliente

FROM Cliente a2

ORDER BY ds_Cliente

 

Evitar los mensajes de confirmación en las consultas de Acción Ir arriba

Generalmente cuando ejecutas una Consulta de Acción te aparece un mensaje de confirmación.

Como esa consulta la ejecutas desde un botón de comando de un formulario, en el evento Al Hacer Click de ese botón insertá el siguiente código entre la línea de código que ejecuta la consulta:

DoCmd.SetWarnings (False)

'Código que ejecuta la consulta

DoCmd.SetWarnings (true)

 

Buscar el valor mínimo o máximo de una tabla mediante una consulta Ir arriba

Supongamos que quieres saber el Producto de menor precio o el de mayor precio de tu tabla Productos:

SELECT Min([Precio]) AS Menor Precio

FROM Produtos;

SELECT Max([Precio]) AS Mayor Precio

FROM Produtos

 

Crear una fila Total para consultas de tabla de referencias cruzadas Ir arriba

Cuando utilizamos las consultas de tabla de referencias cruzadas de Access podemos totalizar columnas incluyendo filas adicionales de totales de campo. Para calcular totales de columnas en el pie de la hojas de datos, había que recurrir a tablas Pivot de Excel o a un informe, ahora veremos como hacerlo en Access.

La solución no es sencilla y requiere la combinación de una consulta de totales, dos consultas de referencia cruzadas, y una consulta de unión.

  1. Crea una consulta de tabla de referencias cruzadas para manejar los detalles.
  2. Crea una consulta de totales para totalizar los valores de cada clasificación.
  3. Crea una consulta de tabla de referencia cruzadas desde la consulta de totales, dándole la misma distribución de campos que la primera consulta de referencias cruzadas, Se esta preparando para utilizar la consulta de unión, que necesita que los campos estén en el mismo orden.
  4. Crea una consulta de unión para combinar las dos consultas de referencias cruzadas, agrupando por el campo DisplayOrder, esto asegura que los valores totales de la consulta de referencia cruzadas se muestren al final.

Esto es todo, después de hacerlo una vez, ¡¡esta chupado!!

Vamos por el ejemplo:

  • Crea una consulta de tabla de referencias cruzadas para manejar los detalles.

Lo primero que hay que hacer es crear una consulta de tabla de referencias cruzadas que manejará el detalle principal de los datos, esta consulta será qryInformesPorZonaMes, con un campo añadido, este campo DisplayOrder está a 0 en la propiedad Campo de la columna.

Al campo Zona se le ha colocado una etiqueta de forma que la palabra Zonas se muestre para el encabezamiento en lugar de Zona

  • Crea una consulta de totales para totalizar los valores de cada clasificación.

Esta consulta es una consulta de totales sencilla que cuenta el número de informes para cada mes, el primer campo es una Expresión llamada Zonas y se establece su valor a Totales.

Observando la hoja de datos de resultados puedes ver que queda configurada para poderla utilizar en una consulta de tabla de referencias cruzadas.

  • Crea una consulta de tabla de referencia cruzadas desde la consulta de totales.

Ahora que tenemos la consulta de totales, vamos a darle un formato similar a la consulta de tablas de referencias cruzadas original creada en el primer paso, para hacerlo vamos a crear una consulta de referencias cruzadas basándonos en la consulta de totales.

La principal diferencia entre las dos consultas de referencias cruzadas es que ambas contienen el campo Displayorder pero en este caso lo establecemos a 1

  • Crea una consulta de unión para combinar las dos consultas de referencias cruzadas

Aquí es donde se crea el resultado final, vamos a coger las dos consultas de referencias cruzadas y combinarlas usando una consulta de Unión. Las consultas de Unión se utilizan para unir (combinar) juntos dos registros que tienen la misma estructura de campos, en este caso las consultas qryInformesPorZonaMes y qryTotalesPorZonaMes.

No se pueden crear consultas de Unión utilizando la cuadricula de diseño de consulta. En su lugar, crea una nueva consulta en modo diseño y elige Vista SQL del menú Ver. Después introduce la siguiente cadena SQL.

SELECT  *  FROM qryInformesPorZonaMes UNION (SELECT  * FROM qryTotalesPorZonaMes)
ORDER BY DisplayOrder;

Observa donde se colocan los paréntesis. Dejando Order By donde está la operación de ordenar por DisplayOrder se realiza en ambos conjuntos de registros y después se unen.

Realmente sencillo y muy efectivo.

 

Registros duplicados Ir arriba

Pueden considerarse Duplicados los registros que nuestra aplicación en un momento dado no puede distinguir como distintos

Las tablas que no tienen clave única son candidatas a contener registros duplicados…

Para eliminar duplicados de esas tablas, podemos seleccionarlos mediante el Asistente para Consultas de Duplicados, ajustar nuestros criterios hasta seleccionar sólo los registros a eliminar y por último, ya muy seguros, cambiar esta consulta a Consulta de Eliminación. (ojo: pueden aparecer tanto los registros válidos como los duplicados que desearíamos eliminar. Antes de convertirla en Consulta de Eliminación debemos limitar los resultados a solo aquellos registros que realmente queremos eliminar.)

Un caso parecido a duplicados ocurre en consultas a tablas con clave única, pero que por nuestros criterios de selección generen más registros de los deseados en ese momento.

Tip 1 (b) no coincidentes -y claves multicampo-

Tenemos dos versiones de una misma tabla: última versión, hoy / versión anterior, copia de seguridad de hace 3 días, queremos obtener una lista de registros introducidos entre la copia de seguridad y hoy

Importamos la tabla de la copia de seguridad a nuestra MDB actual (si la tabla actual fuera 'tabla1' la anterior se nos nombraría 'tabla11')

Nuestra/s tabla/s no tienen ID, contador, lo que Access genera cuando aceptamos ¿desea... ? al guardarla por primera vez) sino una clave única compuesta por los campos A, B, C.

Vamos a consultas, hacemos clic en nuevo / consulta de no - coincidentes, y seguimos el asistente …

La relación entre ambos estados de nuestra tabla no es un solo campo sino 3. Para ello, siguiendo las instrucciones, elegimos el primer campo, A, en ambas tablas, e inmediatamente pulsamos en la flecha doble ( <=> ), para indicar su relación... y luego repetimos la misma operación para los campos B y C... (craso error)

Si la tabla antigua tiene 50 registros y la nueva tabla 100, tras ejecutar la consulta, el resultado no nos muestra 50 fichas como cabría esperar. (En mi caso concreto siempre me daba más...)

¿Se trata de un modo peculiar (ver más abajo) de Access de mostrar información ?

El Sql o el diseño de la consulta no se entiende ni <j>... empezar de nuevo: ... releyendo el mensaje del primer paso. Vemos claramente 'haga clic en el campo...' ¿? (UNO , ¡ no varios !)

Entendida la causa del BUG podemos proceder a solucionarlo:

o Creando la clave única < id> en versiones futuras de la tabla ( ojo, No funciona si la información está desordenada en cuanto a ABC)

o Creando un campo extra - digamos ABC - en cada versión de la tabla, que sea la concatenación de los campos A, B y C. (esto es lo que yo he probado, EVITO los auto-claves ID)

Para esto ultimo, una vez creado el campo ABC en cada tabla se puede rellenar con una consulta de actualización, que, en la fila ABC contengan la celda Actualizar a: A & B & C

Si no queremos modificar las tablas podemos crear sendas consultas de selección con un campo calculado (x ej. CLAVUN:A&B&C) y usar dichas consultas en vez de las tablas.

Tip 1 (c) Número de Registros

No siempre la consulta de Access ES incorrecta SI devuelve un numero inesperado de registros:

Supongamos que nuestras tablas 50 y 100 registros, no hubieran tenido una clave única y pudiesen contener registros duplicados para eliminar.

Para ello tendríamos previsto empezar por ejecutar una consulta de buscar duplicados (tipo selección) y luego convertir esta misma consulta en una consulta de eliminación...

Como ejemplo supongamos que conocíamos previamente que había 5 registros duplicados sobrantes en nuestra tabla... y.. No sin cierta sorpresa, comprobamos que la consulta nos selecciona 10 registros, justamente el doble de los que esperábamos...

Esto se debe a que Access no tiene suficientes criterios como para decidir cuales son los registros 'buenos' o aceptables y los indeseables o 'realmente' duplicados... por tanto nos muestra AMBOS

Lógicamente en nuestro ejemplo lo más rentable es eliminar los cinco indeseados a mano, ( y, si están ordenados, aparecerán juntos un deseado y su indeseado )

 

Calcular edad en una consulta Ir arriba

Edad: (Año(Fecha()-[fecha nacimiento]))-1900