Error en consulta por un rango de edad

Los expertos de este foro.

Recurro a uds para pedirles el favor y me ayuden con un inconveniente que tengo con mi DB Access, es lo último que me falta afinar.

Estoy haciendo una DB en Access 2013, para almacenar información de los residentes de mi conjunto Mi DB tiene 3 tablas

Tabla 1: Residentes (Campos: Id_Residente, Casa, Nombres, Apellidos, Identificación, Genero; FechaNacimiento, Edad... Etc)

Tabla 2: Casa (campos: Id_Casa, Numero_Casa)

Tabla 3: Genero (Campos: Id_Genero, Genero)

He creado un formulario basado en la tabla "Residentes" para capturar la información de cada uno de los residentes; el campo "Fecha_Nacimiento" tiene código VB para que el siguiente campo "Edad" me calcule la edad automáticamente... Hasta aquí todo bien.

PROBLEMA:

Hice un Informe basado en una consulta "ConsultEdades" para que me muestre los residentes de un rango de edades que yo digite. En la consulta, al campo Edad le coloque el siguiente criterio:

Entre [Digite Primer Rango de Edad] Y [Digite Segundo Rango de Edad]

Pero me muestra registros que no cumplen con ese criterio... Quiere decir que no está evaluando el rango de edad que yo dígito.

De antemano agradezco mucho la ayuda con este tema,

! Un abrazo desde Colombia ¡

Atte:

Lucho

1 Respuesta

Respuesta
2

Luis: Ese criterio que escribes está bien.

Veo extraño que no te devuelva los datos adecuados, salvo que la edad devuelta por la fórmula que tengas sea la causante del problema.

Si puedes poner la Formula que estás usando posiblemente podamos hacerla más exacta.

De un modo Bruto puedes y como primera prueba, usa:

Edad: DifFecha("yyyy";[FechaNac];Fecha();2;2)

Mis saludos

Jacinto

Cordial Saludo Jacinto

Muchas gracias por tu pronta respuesta

Mira la siguiente fórmula que utilicé la cual encontré en alguna parte de este foro, de donde se llama una función publica:

Private Sub Fecha_Nacimiento_AfterUpdate()

If IsNull(Me.Fecha_Nacimiento.Value) Then Exit Sub
If Me.Fecha_Nacimiento.Value > Date Then
MsgBox "La fecha de nacimiento no puede ser Mayor a la fecha actual", vbCritical, "Error: Fecha Incorrecta"
Exit Sub
End If

Me.Edad.Value = fncEdad(Me.Fecha_Nacimiento.Value)

End Sub

Y se creó una función publica 

Public Function fncEdad(Fecha_Nacimiento As Date) As Integer
'Analizamos el mes de la fecha actual
Select Case Month(Date)
Case Is > Month(Fecha_Nacimiento)

fncEdad = DateDiff("yyyy", Fecha_Nacimiento, Date)
Case Is < Month(Fecha_Nacimiento)

fncEdad = DateDiff("yyyy", Fecha_Nacimiento, Date) - 1
Case Is = Month(Fecha_Nacimiento)

If Day(Date) < Day(Fecha_Nacimiento) Then 'Si el día actual es menor, aun no cumplió
fncEdad = DateDiff("yyyy", Fecha_Nacimiento, Date) - 1
Else
fncEdad = DateDiff("yyyy", Fecha_Nacimiento, Date)
End If
End Select
End Function

Muchas gracias por tu disposición en ayudarme

Atte:

Lucho

Luis: La metodología que citas, también me parece correcta.

Lo unico que se me ocurre es que estés guardando directamente las edades en una Tabla y no la recalcules antes de ejecutar tu consulta.

Si fuera así necesitarías algun Procedimiento, con una SQL o un Recordset que te ponga las fechas actuales de la Tabla. Ya me contarás. Mis saludos >> Jacinto

Jacinto:

Efectivamente la edad se esta guardando en ese campo de la tabla "Residentes".

Soy muy malo para la programación y desconozco como se haría lo que tu indicas

Puedes ayudarme por favor¡

Mil Gracias

Luis: Naturalmente que te puedo ayudar. Con el Nombre de la Tabla Residentes y El Campo FechaNacimiente te construiré el Procedimiento de actualización.

Procuraré hacerlo esta noche, pero aún tengo algunos temas pendientes de acabar.

Si no fuese ésta noche, lo hago mañana. Mis saldos >> Jacinto

Luis: Aprovechando que ya tienes la Función de calcular la Edad, en un Módulo de Código Estándar, Copia y pega este Procedimiento.

Public Sub ActualizaEdades()
Dim QryEdades As String
Dim RstEdades As DAO.Recordset
Dim LaFechaNac As Variant
Dim EdadActual As Integer
QryEdades = "SELECT  FechaNacimiento, Edad FROM Residentes;"
Set RstEdades = CurrentDb.OpenRecordset(QryEdades, dbOpenDynaset)
If Not RstEdades.EOF And Not RstEdades.BOF Then
        RstEdades.MoveLast
        RstEdades.MoveFirst
        Do While Not RstEdades.EOF
                LaFechaNac = RstEdades.Fields("FechaNacimiento").Value
                'Para evitar errores
                If IsNull(LaFechaNac) Then GoTo SaltaRegistro
                EdadActual = FncEdad(CDate(LaFechaNac))
               RstEdades.Edit
                        RstEdades.Fields("Edad").Value = EdadActual
                RstEdades.Update
SaltaRegistro:
                RstEdades.MoveNext
                DoEvents
               Loop
Else
          MsgBox "La Tabla Residentes no tiene Registros", vbCritical, "RECORDSET VACIO"
End If
RstEdades.Close
Set RstEdades = Nothing
End Sub

Para llamar a éste Procedimiento, mi sugerencia es que lo hagas al Cargar el Formulario Principal de tu Aplicación:

Private Sub Form_Load()
Call ActualizaEdades
End Sub

Si copias y pegas ésto último, no te olvides de activar el [Procedimiento de Evento] e Propiedaes Eventos >> Al Cargar. Ya me contarás. Saludos >> Jacinto

Cordial Saludo Jacinto

Seguí tus instrucciones, pero me genera un error al cargar el formulario principal

Me gustaría saber este procedimiento que hace o cual es su finalidad

Muchas gracias... Bendiciones

Luis: Lo primero será asegurar que los Nombres de Campo son los que yo pongo, y ahora que me has enviado éste mensaje, leo arriba que FechaNacimiento una vez lo escribes así y otras como Fecha_Nacimiento. La verdad es que yo sin darme cuenta lo he escrito de las dos maneras.

Mira las líneas afectadas y me comentas. Mis saludos >> Jacinto

Hola Jacinto

Efectivamente antes de ejecutarlo yo verifique y corregí los nombre.

Si tu quieres te envío una copia de mi DB para que la analices mejor. Tu me dirás donde te la envío

Espero tu respuesta

Luis: Puedes enviármela a [email protected]

Un saludo >> Jacinto

Hola Jacinto

Ya te envié la DB a tu correo... mil gracias

Saludo: Lucho

Luis: He recibido y abierto tu BD.

Te adelanto lo que he visto y te amplío la respuesta pr eMail.

1.- El campo de Nacimiento, no lo tenías ni FechaNacimiento, ni Fecha_Nacimiento sino como Fecha Nacimiento (Separado).

2.- El campo Edad, lo tienes en la Tabla "Residentes", como Tipo Texto y debe ser número y por coherencia con el valor que devuelve la Función, debería ser Entero.

Solo miraré eso de la BD y te la devuelvo. Mis saludos >> Jacinto

Hola Jacinto

De verdad que no tengo palabras para agradecerte, por tu gran ayuda por tu amabilidad, por tu colaboración tan rápida y eficaz, eso era justo lo que necesitaba. Personas como tú son las que necesita esta sociedad.

Las funciones adicionales que le creaste a la DB me han dejado encantado

Hermano Mil y Mil gracias ...... disculpe mis errores y mis escasos conocimientos

¡Gracias! 

Saludo

Lucho

Hola Jacinto

De verdad que no tengo palabras para agradecerte, por tu gran ayuda por tu amabilidad, por tu colaboración tan rápida y eficaz, eso era justo lo que necesitaba. Personas como tú son las que necesita esta sociedad.

Las funciones adicionales que le creaste a la DB me han dejado encantado

Hermano Mil y Mil gracias ...... disculpe mis errores y mis escasos conocimientos

¡Gracias! 

Saludo

Lucho

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas