Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   sumar dias una fecha dada (https://www.clubdelphi.com/foros/showthread.php?t=43958)

Goyo 24-05-2007 20:15:17

sumar dias una fecha dada
 
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:
Código Delphi [-]
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.

Cita:

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:
Cita:

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).

Código Delphi [-]
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.

Código Delphi [-]
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

Código Delphi [-]
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


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

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