Como hacer una consulta en Access 2013

Recurro al foro en búsqueda de quienes puedan ayudarme con el siguiente tema.

Tengo una BBDD, contiene 3 tablas:

Persona

Id_Perso            autonumérico

Nombres           texto corto

Id_País               número (a)

Id_Actividad      número (b)

Género texto corto

FchNacim fecha corta

FchFallec fecha corta

Notas texto largo

Actividad

Id_Actividad      autonumérico (b)

Actividad texto corto

País

Id_País autonumérico (a)

País texto corto

(*) tablas relacionadas de 1 a varios según referencias (a) y (b). 

La consulta que no logro hacer funcionar es:

Género = M (masculino)

Y Países = "Alemania" O "Italia" O "Japon" O "Inglaterra" O "Escocia" O "Irlanda" O "Gales" O "Francia" O "Belgica" O "Holanda" O "Finlandia" O "Dinamarca" O "Suecia" O "Noruega" O "URSS" O "Estados Unidos"

Y FchNacim  Entre #1/1/1860# Y #12/9/1921#

Y FchFallec >#2/9/1939# y también los que a la fecha de la consulta (hoy), este campo sea nulo (es decir que están vivos) (**)

(**) En este campo es donde se produce el problema.

Quedo a la espera de cualquier ayuda que me puedan brindar.

3 respuestas

Respuesta
2

Así te debiera funcionar:

SELECT Persona.Id_perso, Persona.Nombres, Pais.Pais, Persona.Genero, Persona.FchNacim, Persona.FchFallec
FROM Actividad INNER JOIN (Pais INNER JOIN Persona ON Pais.Id_pais=Persona.Id_Pais) ON Actividad.Id_Actividad=Persona.Id_Actividad
WHERE (((Pais.Pais) In ("Alemania","Italia","Japon","Inglaterra","Escocia","Irlanda","Gales","Francia","Belgica","Holanda","Finlandia","Dinamarca","Suecia","Noruega","URSS","Estados Unidos")) AND ((Persona.Genero)="M") AND ((Persona.FchNacim) Between #1/1/1860# And #9/12/1921#) AND ((Persona.FchFallec)>#9/2/1939# Or (Persona.FchFallec) Is Null));

Por lo menos a mi sí me filtra según tus criterios: http://www.filebig.net/files/PmyWcTJpLL 

Un saludo.


¡Gracias! Muchas gracias por tu respuesta. Intentaré analizarla para entender y aprender la sentencia SQL que me envías y la ejecutaré. Espero que a mi también me funciona.

Estimado. Lamentablemente, he probado tu sentencia SQL y NO ME FUNCIONA.

Quizás, sea importante que te informe: 

1) Estoy usando Access 2013.

2) En la versión que uso, no es necesario usar el formato de fecha mm/dd/aaaa, sin inconvenientes acepta dd/mm/aaaa, al menos en Diseño de Consulta.

3) En la SQL que me enviaste, en el SELECT no has incluido Actividad.Actividad ni 

Int((#9/8/1939#-[FchNacim])/365) AS [Años BoW] ¿es por alguna razón en particular?

4) En la SQL existen diferencia en la denominación de los campos:

TABLA                       SQL

Persona.Id_Perso    Persona.Id_perso

Persona.Género       Persona.Genero

Pais.Id_Pais              Pais.Id_pais

¿es por alguna razón en particular?

Pido disculpas por volver a molestar con el mismo tema y agradezco toda la ayuda que me dan. Saludos cordiales.


Te respondo punto por punto:

1º/ La versión de Access es indiferente, la SQL funciona correctamente en cualquier versión.

2º/ SQL es un lenguaje basado en el inglés americano, y solo entiende la fechas en formato americano (mm/dd/aaaa), por eso en la SQL las ves con ese formato. Sin embargo, si abres la consulta en vista diseño, verás que las fechas en los criterios están en formato "español" (dd/mm/aaaa).

3º/ En la consulta no incluí la actividad porque no influye para nada en el resultado que arrojan los filtros. Si tu la necesitas, solo tienes que añadirla a tu consulta. Tampoco dices que lo necesites en tu consulta.

En cuanto al campo de la edad, ¿por qué tengo yo que saber que tu consulta tiene que contar también con un campo calculado con esa fórmula, si en ningún momento haces mención a él?

4º/ En las SQLs que te puse, usé la notación de mi ejemplo, pero no hay diferencias entre los nombres de la SQL y de los campos. Lo que sí puede ser es que haya diferencia entre los nombres del ejemplo y los que tu manejas, pero ya es tarea tuya adaptar lo que yo te sugiero a las peculiaridades concretas de tu BD.

¡Muchísimas Gracias por tu clarísima explicación! Te ruego, por favor, no vayas a interpretar que de mi parte te hacía algún reclamo. Simplemente lo he separado en puntos por tratar de ser lo más claro posible.

Tienes absoluta razón en decir que no especifiqué la necesidad de los campos Actividad y Edad, en realidad, en ningún momento hice las especificaciones, objetivos y alcances de la BBDD y se que es lo correcto. Pero, reitero, bajo ningún punto de vista, un reclamo hacia ti.

Siempre agradezco a todos aquellos quienes me transmiten sus conocimientos y trato de capitalizarlos y esta oportunidad, no es una excepción.

Si no te resulta molesto, volveré a probar y te mantengo informado. 

Un saludo muy cordial.

Inténtalo, y si no te sale, consulta sin problema.

Respuesta
2

¿Tiene qué ser en una consulta?

Verás, con esa consulta que has construido, sin criterios, haría un formulario(es para tener los campos necesarios). Luego, en algún evento, por ejemplo Al hacer clic de un botón(pero no sería necesario) puedes poner

me.recordsource="select * from nombreconsulta where genero=""M"" and pais=""Alemania"" or pais=""Italia"" or pais=""Japon"" or.....and fechaNacim between #01/01/1860# and #12/09/1921| and fechfallec>#02/09/1939| or fechfall is null"

Es decir, que el origen de registros de ese formulario sea aquellos de la consulta que cumplan esas condiciones

Muchas gracias por tu respuesta. Pero, no se si es que no me expresé bien. Los criterios son los valores que expresé para cada campo y precisamente lo que no funciona es la consulta, no desde donde la llamo.

Ya, pero te decía que en vez de ver los resultados de esos criterios en una consulta los veas en un formulario. Te decía que prefiero el lenguaje VB porque lo considero infinitamente más versátil que el SQL.

De todas formas, si no son datos confidenciales y quieres, repito, si quieres, mándame una copia( si son confidenciales, ponle unos registros inventados a las tablas) a [email protected] y la miro.

Si lo haces, en el asunto del mensaje pon tu alias Luis H, ya que si no sé quien me escribe ni los abro.

Oh..!, muchas gracias por tu buena predisposición. Preparo la BBDD y te la envío por email. Estamos en contacto. Hasta cada momento

Enviados dos mensajes.

Respuesta
1

SELECT Personas.Género, Personas.Id_País, Personas.FchNacim, Personas.FchFallec
FROM Personas
WHERE (((Personas.Género)="M") AND ((Personas.Id_País)=1 Or (Personas.Id_País)=2 Or (Personas.Id_País)=3) AND ((Personas.FchNacim) Between #1/1/1860# And #9/12/1921#) AND ((Personas.FchFallec)>#9/2/1939# Or (Personas.FchFallec) Is Null));

Muchísimas gracias por la respuesta. Lamentablemente, no logro que funcione. Como lo comenté, el mal funcionamiento se produce cuando utilizo el "or" en el campo Fch_Fallec diciéndole que tiene que ser mayor a una fecha o Nulo

Por favor, si tienes alguna indicación para hacer, desde a que gustoso la recibiré.

Estamos en contacto.

Manda base a [email protected]

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas