Delphi - ET, prueba esto

 
Vista:

ET, prueba esto

Publicado por pricinpiante (72 intervenciones) el 10/12/2008 14:48:29
ET, hola como estas espero k bien Feliz navidad.-

tengo un pequeñito contratiempo con este codigo pruebalo a ver si me puedes ayudar
este codigo es para carcular el año y el mes de un empleado en una empresa, pero
me esta pasando lo siguiente, cuando el empleado tiene un año en la empresa
me sale k tiene un año y doce meses, cuando deberia tirar k tiene un año y cero meses.

pruebalo y pon esta fecha para k tenga mejor ilustracion: en maskedit fecha inicial
pon esta 10/12/2007 y en el maskedit fecha actual 10/12/2008, y veras k el resultado
sera un año y doce mese, cuando deberia salirme un año y cero meses, ayudame un poquito con esto

NOTA: COPIA ESTE CODIGO EN EL EVENTO ONCLIK DE UN BOTON
procedure TForm1.BitBtn1Click(Sender: TObject);
var
ano:integer;
mes: integer;
dias: integer;
x:integer;

begin
MaskEdit3.Text:= IntToStr(x);
ano:=YearsBetween(strtodate(MaskEdit1.Text),strtodate(MaskEdit2.Text));
mes:=(MonthsBetween(strtodate(MaskEdit1.Text),strtodate(MaskEdit2.Text)));
dias:=DaysBetween(strtodate(MaskEdit1.Text),strtodate(MaskEdit2.Text));
//Label1.Caption:=FloatToStr(dias/365);
//label1.Caption:= 'tiene '+IntToStr(ano)+' ano(s), '+FloatToStr(mes) +' mes(es) y '+FloatToStr(dias)+' dia(s)';
MaskEdit3.Text:= 'tiene '+IntToStr(ano)+' ano(s), '+FloatToStr(mes) +' mes(es) y '+FloatToStr(dias)+' dia(s)';
end;

end.

gracias de antemano ET
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
sin imagen de perfil
Val: 65
Oro
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

RE:ET, prueba esto

Publicado por E.T. (1244 intervenciones) el 10/12/2008 18:03:07
No doy con la solución, pero ya habia puesto yo un codigo para algo parecido, checa esto, necesitas los mismos compoonentes que ya tenias, pero con el siguiente codigo, solo que aqí tomo años de 365 dias y meses de 30 dias, puede que te de diferencias en meses y dias, por ejemplo, 1 mes 1 dia con este programa, es lo mismo que 1 mes de 31 dias, el total siempre estará bien, solo cambia como está representado

procedure TForm1.Button2Click(Sender: TObject);
var d,a,m,dd:integer;
begin
dd:=DaysBetween((strtodate(MaskEdit1.Text)),(strtodate(MaskEdit2.Text)));;
a:=dd div 365;
d:= dd mod 365;
m:= d div 30;
d:= d-(m*30);
MaskEdit3.Text:= 'tiene '+IntToStr(a)+' año(s), '+FloatToStr(m) +' mes(es) y '+FloatToStr(d)+' dia(s)';
end;
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:ETOtra cosa

Publicado por pricinpiante (72 intervenciones) el 10/12/2008 21:48:05
ET, gracias es justo lo k estaba buscando ahora si me da el calculo correcto,

pero k conversion tengo k hacer para guardar esos datos en la tabla,

tengo tres makeidit, uno es fechaactual( fecha del sistema), el otro es fecha
de ingreso, ( la fecha k se introduce manualmente) y el otro es tiempo calculado
es la k va dar el calculo de las otras dos, la fecha actual la tengo en la tabla
por k la obtengo del sistema ejemplo:

fechaactual.value:= date(), y k conversion hago para guardar las otras dos en la tabla.-

gracias otra vez ET.-
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

RE:ETOtra cosa

Publicado por E.T. (1244 intervenciones) el 10/12/2008 22:57:36
Pues depende del tipo de dato que estás guardando, del método que usas para guardar datos en tu base de datos y de la misma base de datos.

Que tipo de dato es el campo calculado? imagino que los otros dos son tipo date
Que base de datos usas?
El calculado no es necesario guardarlo, pues lo puedes calcular en el momento que desees
La fecha de ingreso ya debería estar guardada en tu BD

Especifica un poco más en que es lo que necesitas
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:ETOtra cosa

Publicado por pricinpiante (72 intervenciones) el 10/12/2008 23:29:03
Hola, de nuevo ET,

toda esa fecha la tengo en una tabla de acces2003, y son de tipo fecha/date
ese es el formato k acces le asigna a los campos tipo fecha, bien

lo que yo quiero es saber el tiempo k tiene un empleado en la empresa

ejemplo algo como el codigo k me enviaste, ahora bien necesito
guardar en esa tabla de acces ese tiempo:

cuando yo introduzca le fecha de ingreso se guarde en la tabla, y el tiempo
k lleva en la empresa, por que tengo un reporte que tiene los datos del empleado
y tambien necesito k salga en el reporte el tiempo k tiene el empleado, (año y meses), en la empresa . bueno no se si me estoy explicando bien..

gracia otra vez ET
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

RE:ETOtra cosa

Publicado por E.T. (1244 intervenciones) el 11/12/2008 02:01:12
Intenta usar esta consulta en el sqlExplorer de delphi, pero para poder usarla tu bd debe estar registrada en el odbc, para que la puedas ver en el sqlExplorer, luego en cualquier tabla que tenga un campo fecha sólo la cambias en el from de la consulta, ademas de que en esta consulta el campo fecha lo modificas si es diferente al tuyo, para que veas, es lo mismo que te habia pero traducido a sql

select fecha, Date() as fecha_actual, Date()-Fecha as dias_empleado, int((Date()-Fecha)/365)as anios,
int(((Date()-Fecha)mod 365)/30)as Meses,((Date()-Fecha)mod 365)-(int(((Date()-Fecha)mod 365)/30)*30) as dias
from facturas

haber si te funciona
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