PDA

Ver la Versión Completa : sumar dias una fecha dada


Goyo
24-05-2007, 20:15:17
Necesito saber como sumar dias a una fecha dada, para ello estoy utilizando 3 DBEdit de una tabla de Paradox, la idea es que cuando yo escriba la fecha con un DBDateTimeEditEh1 (DBEdit1) y sumar dias (DBEdit2) y como resultado me de otra fecha ya sumando los dias (DBEdit3).

DBDateTimeEditEh1 es un componente de la libreria EhLib que se asigna directamente a campo de mi Tabla TbEmpleados

Los campos son de tipo String:
FInicioLicencia : String : 10
FTerminoLicencia : String : 10
TotalDiasLicencia: Integer

el codigo que tengo es este:

procedure TFormLicencias.TotaldiasLicenciaChange(Sender: TObject);
begin
TerminaLicencia.Text:= FormatDateTime('dd/mm/yyyy', StrToDate(DBDateTimeEditEh1.Text) + StrToInt(TotaldiasLicencia.Text));
end;


de hecho al principio si lo hacia, pero ahora cuando ejecuto mi Aplicacion me manda el siguiente mensaje de error: (si le pongo como comentario a esta linea:
// TerminaLicencia.Text:= FormatDateTime('dd/mm/yyyy', StrToDate(DBDateTimeEditEh1.Text) + StrToInt(TotaldiasLicencia.Text));
se ejecuta bien mi aplicacion.


Project PlantillaCAPASEG.exe raised exception class EConvertError with message " / / 'is not a valid date'.

y le vuelvo a pulsar ejecutar y me envia el siguiente error:

Exception EConvertError in module PlantillaCAPASEG.exe at 0000872A ' / / 'is not a valid date'


La idea que tengo es que cuando yo capture todos los datos de los empleados estos se graben casi todos los campos (exepto FInicioLicencia, FTerminoLicencia, TotalDiasLicencia), para que cuando yo entre a dar Licencias (Permisos en el trabajo por X numero de dias), y utilizar un CheckBox al activar se activen los campos solicitados) y en el campo Estatus: sea igual a L (Licencia), A (Activo).


procedure TFormLicencias.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked then
begin
// DBDateTimeEditEh1.Enabled:=True;
TotaldiasLicencia.Enabled:=True;
IniciaLicencia.Enabled:=True;
TerminaLicencia.Enabled:=True;
dm.TbEmpleados.FieldByName('Estatus').AsString:= 'L';
end
else
begin
dm.TbEmpleados.FieldByName('Estatus').AsString:= 'A';
Totaldiaslicencia.Text:='';
IniciaLicencia.Text:='';
TerminaLicencia.Text:='';
end;
end;

de momento saludos y gracias por su atencion.

marcoszorrilla
24-05-2007, 20:24:00
Resumiendo mucho el asunto los días lo mejor es que se los sumes al campo y no al Dbedit.

Table1Fecha.Value:=Table1Fecha.Value + StrToInt(edit1.Text);

Convendría poner un try....except porque puede que lo que introduzcan en el edit no sea un entero.

Edito porque veo que tienes un error de definición de campos, los campos deben de ser fecha y no texto. Deberías cambiar los campos a tipo fecha e incluso agregar un campo de tipo entero para poner los días que se le van a aplicar, nos ahorramos el try...except y además programando el evento OnChange de este campo resolvemos todo el problema.

Un Saludo.

juanlaplata
24-05-2007, 21:05:55
uses DateUtils ;
var dia,mes,ano: Word;
begin
dia:= DayOf(fecha);
mes:= MonthOf(fecha);
anio:= yearOf(fecha.Text);
incAMonth(anio,mes,dia,1);

El 1 indica que aumeta dicha fecha en un mes, asi tambien
incADay(anio,mes,dia,1);
incAYear(anio,mes,dia,1);
Saludos, espero te sirva.

loxod
25-05-2007, 02:23:39
El componente D/Time Calculator te saca la diferencia entre dos fechas.

http://www.utilmind.com/delphi1.html