Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-07-2007
Avatar de Goyo
Goyo Goyo is offline
Miembro
 
Registrado: feb 2006
Posts: 89
Poder: 19
Goyo Va por buen camino
Exclamation calcular la edad....

Estoy realizando un pequeño sistemita para controlar empleados, lo que pretendo realizar es que cuando le escriba y/o seleccione la fecha de nacimiento, al momento de salir de este componente, me muestre automaticamente la edad en un DBEdit. Les comento que SI me muestra la edad, solo que despues de salir del campo DBDateTimeEditEh1 no me muestra la edad automaticamente, para que me pueda mostrar la edad tengo que volver al pulsar sobre el mismo campo para que me pueda mostrar la edad...

Utilizo tablas de Paradox y aqui les muestro el codigo que tengo en el evento OnExit del DBDateTimeEditEh1

Código Delphi [-]
procedure TCardexForm1.DBDateTimeEditEh1Exit(Sender: TObject);
var
 antiguedad : integer;
begin
  try
    if not varisnull(dm.TbEmpleadosFechadeNacimiento.value) and (dm.TbEmpleadosFechadeNacimiento.value <> 0) then
    begin
      //cálculo de la antigüedad de una variedad
      antiguedad := trunc (trunc (date - dm.TbEmpleadosFechadeNacimiento.value) / 365);
      dm.TbEmpleadosEdad.value := antiguedad;
    end;
  except
    //raise;  no se muetra el error ya que es un campo calculado
  end;
end;

Nota: El componente DBDateTimeEditEh1 es de la Libreria EhLib... mis campos que se involucran son: FechadeNacimiento y Edad

de antemano muchas gracias..

Última edición por Goyo fecha: 04-07-2007 a las 20:45:41.
Responder Con Cita
  #2  
Antiguo 04-07-2007
gabrielkc gabrielkc is offline
Miembro
 
Registrado: jun 2007
Ubicación: Chihuahua Mexico
Posts: 118
Poder: 17
gabrielkc Va por buen camino
Los componentes Data Aware y sus problemitas y sus problemotas

Yo usaría un TEdit son unas cuantas lineas de código mas.... pero pues ya es a juicio de cada uno
Responder Con Cita
  #3  
Antiguo 04-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Pregunta, ¿Tiene que ser al salir del Combo?, Porque si no, podría ser en el OnSetText del campo.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #4  
Antiguo 04-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
O también podrías aprovechar que estas usando ese componente de la biblioteca EhLib y usar su evento OnChange.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #5  
Antiguo 04-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
O pensándolo bien, mejor te sirva el OnUpdateData.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #6  
Antiguo 04-07-2007
Avatar de Goyo
Goyo Goyo is offline
Miembro
 
Registrado: feb 2006
Posts: 89
Poder: 19
Goyo Va por buen camino
ya probe en OnChange y nada me muestra un error que mi tabla no esta en modo edicion... tambien puse el codigo en el evento OnsetText y me marco un error en varisnull.

ojala me puedan ayudar a solucionar este problema, la idea es mejorarlo y/o corregir el codigo... de antemano muchas gracias....

Última edición por Goyo fecha: 04-07-2007 a las 21:46:46.
Responder Con Cita
  #7  
Antiguo 04-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Pruebalo asi, en el OnChange:

Código Delphi [-]
 
var
 antiguedad : integer;
begin
  try
    if not varisnull(dm.TbEmpleadosFechadeNacimiento.value) and (dm.TbEmpleadosFechadeNacimiento.value <> 0) then
    begin
      //cálculo de la antigüedad de una variedad
      antiguedad := trunc (trunc (date - dm.TbEmpleadosFechadeNacimiento.value) / 365);
      dm.TbEmpleados.Edit;
      dm.TbEmpleadosEdad.value := antiguedad;
    end;
  except
    //raise;  no se muetra el error ya que es un campo calculado
  end;
end;
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #8  
Antiguo 04-07-2007
Avatar de Goyo
Goyo Goyo is offline
Miembro
 
Registrado: feb 2006
Posts: 89
Poder: 19
Goyo Va por buen camino
Red face definitivamente No lo hace

ya lo probe con el evento OnChange de la manera que me sujeriste y no realiza nada, ni siquiere muestra algo en Dbedit (Edad)... con el evento OnExit del DBDateTimeEditEh1 si lo hace, solo que tiene que pulsar otra vez sobre el mismo componente, despues de haber salido, para que te muestre la fecha...
de todos modos muchas gracias por tus sugerencias...
Responder Con Cita
  #9  
Antiguo 04-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Una pregunta, ¿Porque no haces un campo calculado en el DataSet para que uses el evento OnCalcFields?
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #10  
Antiguo 04-07-2007
Avatar de Goyo
Goyo Goyo is offline
Miembro
 
Registrado: feb 2006
Posts: 89
Poder: 19
Goyo Va por buen camino
ya lo realice se llama calcula Edad

Cita:
Empezado por jhonny
Una pregunta, ¿Porque no haces un campo calculado en el DataSet para que uses el evento OnCalcFields?
ya lo hice dentro del Dataset cree un campo llamado calculaEdad de tipo Integer... ahora que es lo debo hacer con el....
(TbEmpleadoscalculaEdad)
gracias...

Última edición por Goyo fecha: 04-07-2007 a las 22:59:36.
Responder Con Cita
  #11  
Antiguo 04-07-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
No se si esto te servira, es de truco mania:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);

  function Edad(FechaNacimiento:string):integer;
  var
     iTemp,iTemp2,Nada:word;
     Fecha:TDate;
  begin
    Fecha:=StrToDate(Edit1.text); // aqui se inserta la fecha en formato 07/09/1969
    DecodeDate(Date,itemp,Nada,Nada);
    DecodeDate(Fecha,itemp2,Nada,Nada);
     if FormatDateTime('mmdd',Date) <
        FormatDateTime('mmdd',Fecha) then Result:=iTemp-iTemp2-1
                                     else Result:=iTemp-iTemp2;
  end;

begin
  Label1.Caption:=intToStr(Edad('07/09/1969'));
end;
Creo que la diferencia seria que en vez de buscar la fecha en el edit, se busque en la tabla.
Saludos
Responder Con Cita
  #12  
Antiguo 04-07-2007
gabrielkc gabrielkc is offline
Miembro
 
Registrado: jun 2007
Ubicación: Chihuahua Mexico
Posts: 118
Poder: 17
gabrielkc Va por buen camino
Cita:
Empezado por Goyo
ya lo hice dentro del Dataset cree un campo llamado calculaEdad de tipo Integer... ahora que es lo debo hacer con el....

gracias...
En el evento OnCalcFields de tu DataSet llama el procedimiento que obtiene la edad y asignalo al valor del campo
Responder Con Cita
  #13  
Antiguo 04-07-2007
gabrielkc gabrielkc is offline
Miembro
 
Registrado: jun 2007
Ubicación: Chihuahua Mexico
Posts: 118
Poder: 17
gabrielkc Va por buen camino
en el OnCalcFields de tu dataset quedaría

FieldByName('CalculaEdad'):=trunc (trunc (date - dm.TbEmpleadosFechadeNacimiento.value) / 365);
Responder Con Cita
  #14  
Antiguo 04-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Bien, entonces solo basta con que coloques tu codigo en el OnCalcFields del Dataset:
Código Delphi [-]
 
var
 antiguedad : integer;
begin
  try
    if not varisnull(dm.TbEmpleadosFechadeNacimiento.value) and (dm.TbEmpleadosFechadeNacimiento.value <> 0) then
    begin
      //cálculo de la antigüedad de una variedad
      antiguedad := trunc (trunc (date - dm.TbEmpleadosFechadeNacimiento.value) / 365);
      dm.TbEmpleados.Edit;
      dm.TbEmpleadosCalculaEdad.value := antiguedad;
    end;
  except
    //raise;  no se muetra el error ya que es un campo calculado
  end;
end;
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #15  
Antiguo 04-07-2007
gabrielkc gabrielkc is offline
Miembro
 
Registrado: jun 2007
Ubicación: Chihuahua Mexico
Posts: 118
Poder: 17
gabrielkc Va por buen camino
Solo una correccion jhonny, me parece que para los campos calculados no es necesario que pongas la tabla en modo de edición.
Responder Con Cita
  #16  
Antiguo 04-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por gabrielkc
Solo una correccion jhonny, me parece que para los campos calculados no es necesario que pongas la tabla en modo de edición.
Tienes razón, , debo echarle la culpa a algo, a ver, a ver... ahhh, ya se, eso fue culpa del Copiar y Pegar.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #17  
Antiguo 04-07-2007
Avatar de Goyo
Goyo Goyo is offline
Miembro
 
Registrado: feb 2006
Posts: 89
Poder: 19
Goyo Va por buen camino
Lightbulb por fin quedo... solucionado

ahora ya solucione mi duda... gracias por su ayuda.. aqui pongo el codigo correcto que puse en el evento OnCalcsFields del DataSet, ahora si hace lo que queria, ahora solo en la pantalla donde me mostraba la edad (campo normal DBEdit) enlace el campo calculado calculaEdad... ahora si lo hace...

Código Delphi [-]
   TbEmpleadoscalculaEdad.Value :=trunc (trunc (date - dm.TbEmpleadosFechadeNacimiento.value) / 365);

graciar por su ayuda...
saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 completa MaMu Varios 3 29-03-2011 22:29:53
calcular edad emiliu Varios 3 28-11-2005 10:58:52
Calcular la edad execta de una persona Jorge Taveras SQL 2 13-02-2005 06:25:30
Calcular edad picapiedra Varios 4 21-12-2004 00:27:29
como calcular la edad de un usuario ajum Tablas planas 7 29-07-2003 18:41:31


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


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