Delphi - Calcular Edad

 
Vista:
sin imagen de perfil

Calcular Edad

Publicado por SIMON (17 intervenciones) el 03/06/2012 18:46:15
Hola a todos
Tengo un DBEdit1 y un DBEdit2

En el DBEdit1 almacena la fecha de nacimiento y debe introducirse con el siguiente formato. 05/15/1974, claro que la fecha puede variar.

El DBEdit2 almacena la edad.

Que es lo que quiero.
Que cuando introduzca la fecha de nacimiento en el DBEdit1 automáticamente calcule la edad en el DBEdit2
Sé que el código va en el Evento OnExit del DBEdit1 y también se que la edad= fecha del sistema – fecha de nacimiento, pero no me sale.

Por ejemplo si la fecha de nacimiento es: 15/08/1974, la edad es 38

Gracias por anticipadas
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

Calcular Edad

Publicado por Arshak (8 intervenciones) el 03/06/2012 19:22:34
Recién estoy empezando con delphi y programación en general y no sé si está del todo bien, pero lo que se me ocurrió es esto:

Primero, la fecha no se puede ingresar como 05/15/1974 (con las barras). Se tiene que ingresar el día en una variable, el mes en otra variable y el año en otra variable.

Luego hay que priorizar las tres variables, la que tiene mayor prioridad va a ser la variable que guarda el año, después el mes y después el día.

Después de que el usuario ingresa los 3 números (dia, mes, año) hay que sumarlos en una misma variable, en tu caso sería DBEdit1. Pero hay que llevarlos a un formato que mantenga la prioridad establecida con anterioridad y también permita realizar comparaciones (mayo que, menor que). Ese formato será AAAAMMDD (año, mes, dia).

DBEdit1 := año*10000+mes*100+dia

se multiplica al año por 10000 para guardar 4 lugares (que es la cantidad de 0 que tiene) los 4 lugares seran destinados 2 al mes y 2 al dia, y el mes se multiplica por 100 para guardar 00 para el dia.

Ahora ya tenemos la fecha de nacimiento del usuario en un formato "manejable", pero el usuario no será consiente de este formato, por lo que no importa que no sea legible.

Necesitaremos otra variable que contenga la fecha actual, esta variable puede ser constante (si el programa es para ejecutarlo en el día, guardará la fecha del día (AAAAMMDD), o sino puede ser una variable que guarde la fecha actual, no sé cuál es la función que actualiza la fecha.

Ya tenemos dos variables: DBEdit1 que contiene la fecha de nacimiento del usuario y FECHA (por ejemplo) que contiene la fecha de hoy. Ahora necesitamos la diferencia de fechas (FECHA - DBEdit1) y guardamos esa operación en la variable ANIOS(por ejemplo).

Esto se hace para calcular el tiempo que tiene el usuario de vida. Pero el formato será AAAAXXXX (XXXX no se sabe qué es) y necesitamos extraer el año de vida que tiene, por lo que DBEdit2:= ANIOS/10000

Te doy un ejemplo con mi edad

26/10/1991 → mi nacimiento
03/06/2012 → fecha actual

DBEdit1 := 1991*10000+10*100+26 → 19911026
FECHA := 2012*10000+06*100+03 → 20120603

ANIOS := FECHA - DBEdit1 → 209577

DBEdit2 := ANIOS/10000 → 20,9577 y el entero es la edad en años que tengo.
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
sin imagen de perfil
Val: 65
Oro
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

Calcular Edad

Publicado por E.T. (1244 intervenciones) el 05/06/2012 00:40:12
Una aproximación mas sencilla puede ser simplemente restar las fechas, algo asi:
1
FloatToStr((StrToDate(Edit2.Text)-StrToDate(Edit1.Text))/365)
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
sin imagen de perfil

Calcular Edad

Publicado por SIMON (17 intervenciones) el 06/06/2012 01:47:55
Hola a todos.

De la forma que explicó el amigo E.T., creo que es la forma más correcta pero me da un error.

No sé si es que estoy poniendo algún paréntesis malo.

Lo estoy haciendo en el evento OnExit del DBEdit2
DBEdit2.Text:= (DateToStr(Date)- FloatToStr(StrToDate(DBEdit1.Text)));
DBEdit2= Fecha del sistema – fecha nacimiento

Disculpen mi ignorancia, pero gracias por anticipadas.
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
sin imagen de perfil
Val: 65
Oro
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

Calcular Edad

Publicado por E.T. (1244 intervenciones) el 06/06/2012 18:00:19
Lo que estas haciendo es convertir la fecha del sistema en tipo string, luego le quieres restar otro string, los string no pueden ejecutar operaciones aritmeticas, por lo tanto deberia ser asi

DBEdit2.Text:= floattostr((Date - StrToDate(DBEdit1.Text))/365);
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
sin imagen de perfil

Calcular Edad

Publicado por SIMON (17 intervenciones) el 06/06/2012 18:29:03
Hola a todos:
Las fechas la está restando bien pero en la edad salen demasiados números, debería salir el resultado redondeado.

Por ejemplo
DBEdit2.Text:= floattostr((Date - StrToDate(DBEdit1.Text))/365)
DBEdit2= fecha del sistema – fecha de nacimiento (05/05/1974)
Y sale como resultado
DBEdit2= 38.112328767 y debería salir solamente 38.
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
sin imagen de perfil
Val: 65
Oro
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

Calcular Edad

Publicado por E.T. (1244 intervenciones) el 06/06/2012 20:02:34
Hay que aprender a usar la ayuda de delphi, y tampoco hace mal usar google, o tu buscador de preferencia

DBEdit2.Text:= floattostr(trunc((Date - StrToDate(DBEdit1.Text))/365));

esto que te pongo no es redondeo, solo te pone la parte entera
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
sin imagen de perfil

Calcular Edad

Publicado por SIMON (17 intervenciones) el 10/06/2012 14:54:20
Resuelto, Gracias
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