Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Calculo Edad Exacta VB6 con Access

Estas en el tema de Calculo Edad Exacta VB6 con Access en el foro de Visual Basic clásico en Foros del Web. Hola a todos La cuestión es la siguiente: He buscado por "Internete" posibles funciones/rpocedimientos para poder hacer lo que deseo, que es obtener la edad ...
  #1 (permalink)  
Antiguo 26/05/2010, 16:18
 
Fecha de Ingreso: octubre-2009
Mensajes: 40
Antigüedad: 14 años, 6 meses
Puntos: 1
Pregunta Calculo Edad Exacta VB6 con Access

Hola a todos

La cuestión es la siguiente:

He buscado por "Internete" posibles funciones/rpocedimientos para poder hacer lo que deseo, que es obtener la edad exacta (Tiene X años, X meses y X Días de haber nacido) del campo Fecha de Nacimiento en Access y reflejar el resultado en label o textbox.

Se que tiene que ser:

EdadVida = DateSystem - "rs.recordset!FechaNacimiento"
Label.Caption = EdadVida

gracias de antemano.
  #2 (permalink)  
Antiguo 27/05/2010, 01:25
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Calculo Edad Exacta VB6 con Access

Revisa la ayuda sobre DateDiff pero si quieres EXACTAMENTE Años, Meses y Dias, deberás currártelo un poco para hacer los cálculos relativos al ultimo año.

Puedes utilizar el DateDiff

Para los años............ DateDiff("yyyy", CDate(Text1), Date)
Para los meses.......... DateDiff("m", CDate(Text1), Date) MOD 12

después te quedan los días que se me antoja algo mas complicado
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #3 (permalink)  
Antiguo 28/05/2010, 15:29
 
Fecha de Ingreso: octubre-2009
Mensajes: 40
Antigüedad: 14 años, 6 meses
Puntos: 1
Respuesta: Calculo Edad Exacta VB6 con Access

Lo intentaré y escribiré luego que pasó
  #4 (permalink)  
Antiguo 20/07/2010, 09:16
 
Fecha de Ingreso: octubre-2009
Mensajes: 40
Antigüedad: 14 años, 6 meses
Puntos: 1
De acuerdo Respuesta: Calculo Edad Exacta VB6 con Access [SOLUCIONADO]

Perdonen la demora, pero ya logré lo que quería.

Lo hice de esta manera:

Primero, una función.
Código:
Function Edad()
If Me.AdoNiño.Recordset.EOF Then
Me.AdoNiño.Recordset.MoveFirst
End If
If Me.AdoNiño.Recordset.BOF Then
Me.AdoNiño.Recordset.MoveLast
End If
Años = DateDiff("yyyy", CDate(Me.AdoNiño.Recordset!FeNa), Date)
Meses = DateDiff("m", CDate(Me.AdoNiño.Recordset!FeNa), Date) Mod 12
Edad = Trim(Años & " Año(s) y " & Meses & " Mes(es) ")
Me.lblNiñosEdadMeses.Caption = Edad
End Function
Luego solo coloqué el nombre de la función tanto en el LOAD del formulario como en el control ADO, para que se actualicen los datos con los que trabajará la función.

Última edición por Cosertel; 20/07/2010 a las 09:18 Razón: Mala redacción
  #5 (permalink)  
Antiguo 22/07/2010, 04:29
Avatar de Txoco  
Fecha de Ingreso: junio-2008
Ubicación: Perdido en tierras Quijotescas
Mensajes: 189
Antigüedad: 15 años, 10 meses
Puntos: 7
Respuesta: Calculo Edad Exacta VB6 con Access

Buenas

VB, Access, y varios otros entornos tratan las fechas como números enteros de 32bits (Long en VB), que representan el número de días transcurridos desde una fecha concreta; en el caso de MS, es el 1 de enero de 1900. Normalmente no es importante saber la fecha de referencia.

Para saber el intervalo en días entre dos fechas, sólo tienes que restarlas, lo que te proporciona directamente un Long que puedes dividir. En tu caso, una forma sería:

Código:
Dim Tmp As Long
    Tmp = Date - Me.AdoNiño.Recordset!FeNa
    Años = Tmp /365
    Meses = (Tmp mod 365) / 30
    Dias = Tmp - (Años * 365) - (Meses * 30)
Eso si, ten en cuenta que el número de días siempre será aproximado, ya que estás suponiendo que todos los meses tienen 30 días. Sin embargo, al restar de esta manera, estás incluyendo todos los días posibles, contando los 29 de febrero de los posibles años bisiestos que correspondan, ya que el propio sistema se encarga de ello.

Un truco un poco bizarro sería convertir el resultado en días a tipo fecha (CDate(Tmp) en el ejemplo), lo que te daría una fecha exacta de la que puedes extraer directamente el dia y el mes con Day(Tmp) y Month(Tmp) respectivamente, y el año mediante Year(Tmp)-Year(Cdate(0)).
__________________
wile sona li mute e sona
  #6 (permalink)  
Antiguo 23/07/2010, 14:42
 
Fecha de Ingreso: octubre-2009
Mensajes: 40
Antigüedad: 14 años, 6 meses
Puntos: 1
Respuesta: Calculo Edad Exacta VB6 con Access

Gracias por el dato.

Lo tendré en cuenta para futuras funciones.
  #7 (permalink)  
Antiguo 21/08/2010, 22:26
 
Fecha de Ingreso: agosto-2010
Mensajes: 1
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Calculo Edad Exacta VB6 con Access [SOLUCIONADO]

Cita:
Iniciado por Cosertel Ver Mensaje
Perdonen la demora, pero ya logré lo que quería.

Lo hice de esta manera:

Primero, una función.
Código:
Function Edad()
If Me.AdoNiño.Recordset.EOF Then
Me.AdoNiño.Recordset.MoveFirst
End If
If Me.AdoNiño.Recordset.BOF Then
Me.AdoNiño.Recordset.MoveLast
End If
Años = DateDiff("yyyy", CDate(Me.AdoNiño.Recordset!FeNa), Date)
Meses = DateDiff("m", CDate(Me.AdoNiño.Recordset!FeNa), Date) Mod 12
Edad = Trim(Años & " Año(s) y " & Meses & " Mes(es) ")
Me.lblNiñosEdadMeses.Caption = Edad
End Function
Luego solo coloqué el nombre de la función tanto en el LOAD del formulario como en el control ADO, para que se actualicen los datos con los que trabajará la función.
Hola, es importante que noten que para poder calcular la edad exacta(almenos en años y meses) deben de considerar el día y mes actual con respecto al dia y mes de la fecha de nacimiento ya que si el día actual es estrictamente mayor al dia de nacimiento y el mes actual es igual o mayor al mes de nacimiento quiere decir que todavía no ha cumplido años, razón por la cual deben de restar un año a los años.... para que lo tomen en cuenta. De igual manera deben de forzar a 11 la cantidad de meses si el mes de nacimiento es igual al mes actual y el dia de nacimiento es mayor al dia actual.

Última edición por mjimenezcr; 21/08/2010 a las 23:03
  #8 (permalink)  
Antiguo 19/11/2011, 19:39
 
Fecha de Ingreso: noviembre-2011
Mensajes: 1
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: Calculo Edad Exacta VB6 con Access

Hola, esta fórmula funciona creando dos campos una llamado [F_Inicial]= Fecha Inicial y otro llamado [F_Final]= Fecha Final o si quieres solo remplaza el nombre de los campos en la formula por el que tu uses, y un tercero donde calculará el resultado final.


=SiInm((Día([F_Final])-Día([F_Inicial]))<0 Y (DifFecha("m",[F_Inicial],[F_Final])-(DifFecha("aaaa",[F_Inicial],[F_Final])*12))=0,DifFecha("aaaa",[F_Inicial],[F_Final])-1,DifFecha("aaaa",[F_Inicial],[F_Final])) & SiInm((SiInm((Día([F_Final])-Día([F_Inicial]))<0 Y (DifFecha("m",[F_Inicial],[F_Final])-(DifFecha("aaaa",[F_Inicial],[F_Final])*12))=0,DifFecha("aaaa",[F_Inicial],[F_Final])-1,DifFecha("aaaa",[F_Inicial],[F_Final])))>1," Años "," Año ") & SiInm((Día([F_Final])-Día([F_Inicial]))<0 Y (DifFecha("m",[F_Inicial],[F_Final])-(DifFecha("aaaa",[F_Inicial],[F_Final])*12))=0,"11",SiInm((Día([F_Final])-Día([F_Inicial]))<0,(DifFecha("m",[F_Inicial],[F_Final])-(DifFecha("aaaa",[F_Inicial],[F_Final])*12))-1,DifFecha("m",[F_Inicial],[F_Final])-(DifFecha("aaaa",[F_Inicial],[F_Final])*12))) & SiInm((SiInm((Día([F_Final])-Día([F_Inicial]))<0 Y (DifFecha("m",[F_Inicial],[F_Final])-(DifFecha("aaaa",[F_Inicial],[F_Final])*12))=0,"11",SiInm((Día([F_Final])-Día([F_Inicial]))<0,(DifFecha("m",[F_Inicial],[F_Final])-(DifFecha("aaaa",[F_Inicial],[F_Final])*12))-1,DifFecha("m",[F_Inicial],[F_Final])-(DifFecha("aaaa",[F_Inicial],[F_Final])*12))))>1," Meses "," Mes ") & SiInm((Día([F_Final])-Día([F_Inicial]))<0,Día([F_Final])-Día([F_Inicial])+Día(AgregFecha("d",Día([F_Final])*-1,[F_Final])),Día([F_Final])-Día([F_Inicial]))

Saludos.

Etiquetas: fechaexacta, msaccess, vb6, fechas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 23:40.