Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-12-2011
y_a_p y_a_p is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 37
Poder: 0
y_a_p Va por buen camino
Edad!

Hola a todos nuevamente yo!, evidentemente hay algo q estoy haciendo mal cuando saco la edad y los meses porq no me dan bien los resultado, mi sistema esta hecho en Delphi 7, trabajo con BD SQL Manager 2008 y el motor Firebird, lo q busco es, después de haber sacado con la función MontsBetween la cantidad de meses q tiene un paciente desde la fecha de nacimiento hasta hoy, obtener a partir de esa cantidad de meses, por ejemplo: 37, la cantidad de años y meses q tiene ese paciente, por ejemplo: 3 años y 1 mes.Aquí les presento el código:
Código Delphi [-]
var
a,edad,m: Integer;
begin
 a:=0;
 DM.DSET_pac.Edit;
 DM.DSET_pacMESES.Value:=MonthsBetween(Now, DM.DSET_pacMESES.Value);
 edad:=DM.DSET_pacMESES.Value;
 For m:=edad Downto 12 do
   a:=a+1;
   m:=m-11;
DM.DSET_pacEDAD.Value:=a;
DM.DSET_pacMESES.Value:=m;

DM= Data_Module.
DSET_pac= Tabla pacientes.
a= cantidad de años.
m= cantidad de meses.
Ambos obtenidos después del for, q son los q no me dan como debe ser.
edad= cantidad de meses obtenidos con la función MonthsBetween.
Debo contarles q en el OnShow del Alta de pacientes tengo la fecha para q aparezca por defecto con la fecha actual, y al mes y año inicializado en 0, al igual en la BD.
Código Delphi [-]
 DM.DSET_pacMESES.Value:=0;
 DM.DSET_pacEDAD.Value:=0;
 DM.DSET_pacFECHA_DE_NACIMIENTO.Value:= Now;
Desde ya muchas gracias por su ayuda!!!
Responder Con Cita
  #2  
Antiguo 01-12-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.106
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por favor, recuerda poner títulos descriptivos a tus preguntas, Edad! no es ningún título que describa nada.
Responder Con Cita
  #3  
Antiguo 01-12-2011
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola y_a_p, es mejor que utilices las funciones de fecha:

Código Delphi [-]
 var  Anyos, Meses : Integer;
 begin
  Anyos := YearsBetween(Now, FechaInicio);
  if Anyos > 0 then
   FechaInicio := IncYear(FechaInicio, Anyos);

  Meses := MonthsBetween(FechaInicio, Now); 
  showmessage('Edad :'+IntToStr(Anyos)+' Años '+IntToStr(Meses)+' Meses');

lo acomodas a tu codigo.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.

Última edición por Caro fecha: 01-12-2011 a las 15:05:35.
Responder Con Cita
  #4  
Antiguo 01-12-2011
y_a_p y_a_p is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 37
Poder: 0
y_a_p Va por buen camino
IncYear

Voy a tener en cuanta lo del título, igual me gustaría entender q hace el código, me podrían decir q resultado emana la función IncYear igual cuando a fecha le asigno el valor del año y no me deja pasar de integer a date, desde ya muchas gracias!!!
Responder Con Cita
  #5  
Antiguo 01-12-2011
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola, IncYear incrementa en años a la fecha que le pasas como parámetro, te explico el codigo:

Código Delphi [-]
 var  Anyos, Meses : Integer;
 begin
  Anyos := YearsBetween(Now, FechaInicio);//Obtenemos la cantidad de años entre la fecha inicio y la fecha actual
  if Anyos > 0 then
  //si existen años se incrementa esa cantidad, a la fecha inicio para así saber los meses que faltan
   FechaInicio := IncYear(FechaInicio, Anyos);

   Meses := MonthsBetween(FechaInicio, Now); //obtenemos la cantidad de meses

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #6  
Antiguo 01-12-2011
y_a_p y_a_p is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 37
Poder: 0
y_a_p Va por buen camino
Wink

Claro, pero deberías tener en cuenta q a los meses los calcula desde la fecha en q nacio, por lo tanto si tiene 3 años y 1 mes, no te calcula los 3 años y 1 mes te calcula 37 meses... cosa contraria con los años q te los calcula bien pero los meses q restan no los tiene en cuenta, no se si me explico...
Responder Con Cita
  #7  
Antiguo 01-12-2011
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Hola y_a_p,

creo que no has entendido lo que te proponía Caro, en la función
Código Delphi [-]
FechaInicio:=IncYear(FechaInicio, Anyos);
es lo siguiente:

A la FechaInicio (Caro la ha llamado así pero en realidad es la fecha de nacimiento del paciente) le está sumando los años resultantes después de hacer el YearsBetween y que hemos guardado en la variable Anyos.

Pongamos que la FechaInicio es 01/02/2008 y hoy es 01/03/2011 por lo tanto al hacer el YearsBetween tendremos guardado Anyos=3, luego a la fecha inicio le sumamos esos años por lo que tendríamos 01/02/2011, si ahora hacemos
Código Delphi [-]
Meses := MonthsBetween(FechaInicio, Now);
tendremos meses=1.

Espero que esto te haya despejado las dudas que tuvieras.

Saludos.
Responder Con Cita
  #8  
Antiguo 01-12-2011
y_a_p y_a_p is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 37
Poder: 0
y_a_p Va por buen camino
Ah, ahora si comprendo y si me sirvio mucho, estaba interpretando equivocadamente el código, muchísimas gracias!!!
Responder Con Cita
  #9  
Antiguo 02-12-2011
Pedro-Juan Pedro-Juan is offline
Miembro
 
Registrado: ago 2006
Ubicación: Barcelona - España
Posts: 315
Poder: 18
Pedro-Juan Va por buen camino
Hola.

Yo utilizo esta función que encontré por el foro:

Código Delphi [-]
function CalcularEdad(Fecha: TDateTime):String; // GeneralCode -> 015 -- Calcula la edad con la fecha de nacimiento (Años, meses y días)
var A, AA, M, MM, D, DD: Word;
  Anio, Mes, Dia: double;
begin
  DecodeDate(Fecha, A, M, D);
  DecodeDate(Date, AA, MM, DD);
  Anio := Int(AA - A);
  if( M <= MM ) then
     Mes := MM - M
  else
  begin
    Mes := MM+12-M;
    Anio := Anio -1;
  end;
  if( D <= DD ) then
    Dia := DD - D
  else
  begin
    Dia:=DD+MonthDays[IsLeapYear(AA),MM]-D;
    Mes := Mes -1;
  end;
if Mes < 0 then
  begin
    Anio := Anio - 1;
    Mes := 12 + Mes;
  end;
  Result := Format('Años: %.0f, Meses: %.0f, Días: %.0f', [Anio, Mes, Dia]);
end;


Por si sirve. Un saludo.
__________________
Este mundo es el camino para el otro, que es morada sin cesar. Mas cumple tener buen tino para andar esta jornada sin errar. (J. Manrique)

Última edición por Pedro-Juan fecha: 02-12-2011 a las 00:45:49. Razón: Algo ha ido mal en mostrar el código Delphi
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Calcular Edad Ivan A. Garcia Conexión con bases de datos 3 14-08-2008 00:36:29
La edad FGarcia Humor 1 24-07-2007 15:59:39
calcular la edad.... Goyo OOP 16 04-07-2007 22:36:53
calcular edad emiliu Varios 3 28-11-2005 09:58:52
La edad de las moderadoras santana Humor 30 07-09-2004 16:37:44


La franja horaria es GMT +2. Ahora son las 01:09:01.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi