Access - Cada registro con su edad

 
Vista:

Cada registro con su edad

Publicado por champiñon (5 intervenciones) el 09/10/2006 09:34:18
Resulta que he aplicado una función para calcular la edad (en base al campo FechaNacimiento, claro..!) de la siguiente manera:

* Cuadro de texto "FechaNacimiento" con evento AfterUpdate Me.Edad=Me.CalculaEdad(FechaNacimiento), donde "Edad" es el cuadro de texto donde aparece la edad en cuestión.

La función CalculaEdad la he definido como

Function CalculaEdad(FNac) As Integer
CalculaEdad = Int(Val(Format(Date, "yyyy.mmdd")) - Val(Format(FNac, "yyyy.mmdd")))
End Function

El problema me surge cuando paso a un nuevo registro en blanco, ya que el campo de Edad sigue manteniendo el valor en vez de ser nulo (hasta que modifique la fecha de nacimiento).

Cómo lo soluciono???
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Cada registro con su edad

Publicado por Chea (1015 intervenciones) el 09/10/2006 15:31:40
La edad es el ejemplo típico de una campo calculado QUE NO DEBE GUARDARSE pues, evidentemente, al día siguiente el valor ya puede ser erróneo.

Es mejor no guardarlo y crear un campo calculado donde lo necesites (formularios, informes o consultas).

Usando tu propia función, no tendrías más que eliminar el campo de tu tabla y en el formulario crear un cuadro de texto cuyo origen sea:

=Int(Val(Format(Date; "yyyy.mmdd")) - Val(Format(FNac; "yyyy.mmdd")))

Saludos
José Bengoechea Ibaceta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cada registro con su edad

Publicado por champiñon (5 intervenciones) el 10/10/2006 11:06:33
...y efectivamente, José, ese campo lo utilizo en un formulario como ya comenté al abrir el hilo. El problema se plantea dentro del formulario, al pasar de un registro a otro, ya que el campo donde se almacena la edad no se actualiza al navegar por los registros (dentro del formulario, me refiero).
Imagino que el quid está en el código, pero no lo veo...q me sugieres????
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cada registro con su edad

Publicado por Chea (1015 intervenciones) el 10/10/2006 15:48:58
¿Estás guardando el dato? Ese sería el problema.

¿Estás asignando el valor por código? Ese es el problema.

Debes usar un campo calculado, al que no se asigna valor por código (no podrás). El valor lo toma porque en la propiedad "Origen del control" has puesto una expresión.Por ejemplo:

= (Date() - FechaNacimiento)\365

Que no se te olvide poner el signo igual delante.

Saludos
José Bengoechea Ibaceta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cada registro con su edad

Publicado por champiñon (5 intervenciones) el 11/10/2006 08:50:00
Perdóname, José, pero no entiendo tu respuesta.

Te voy a explicar lo más detalladamente posible mi caso por si estuviera omitiendo algún punto importante:

Tengo un formulario con varios controles de ficha. Uno de esos controles es para los Datos personales y ahí existe el campo Fecha de Nacimiento. En otro control de ficha (concretamente, en Datos sanitarios) tengo un campo Edad.

Aplico el evento siguiente al campo Fecha de Nacimiento, para que después de actualizarse me pase la edad al campo correspondiente:

Private Sub FechaNacimiento_AfterUpdate()
Me.Edad = CalculaEdad([FechaNac])
End Sub

Si ahora paso a otro registro (ya sea uno existente o uno en blanco), el campo de Edad mantiene el valor que acabo de calcular. Ahí está el problema!. Lo de que mantenga el valor a pasar a nuevo registro podría solucionarlo mediante un evento que "resetease" al abrir nuevo registro, pero creo que no es la solución...

Respecto a lo de guardar el dato, realmente no me interesa guardarlo, sólo que la aplicación lo muestre cuando el usuario consulta el formulario (o está metiendo datos). De ahí que no haya creado un campo en la tabla.

Un saludo y muchas gracias por tu interés.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar