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 21-10-2011
Vales08 Vales08 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 133
Poder: 14
Vales08 Va por buen camino
Realizar un bucle for con fechas!!

Hola a todos...
Hoy mi duda es concisa..

Necesito saber si se puede realizar un for con fechas o datos de tipo tDateTime..
Lo que yo quiero realizar es un for que va desde la fecha actual (Now) hasta el ultimo dia del mes (UltimoDia), donde la fecha actual se va incrementando hasta llegar a Ultimodia.

Código Delphi [-]
        var
          Proximafecha, UltimoDia, DiaActual:TdateTime;
          hoy:integer;
          dia, mes, anio: Word;

         ...
        hoy:=DayOfTheWeek(Date); // guardo el dia de la semana en el que se ubica la fecha actual
        DecodeDate(Now, anio, mes, dia);
        UltimoDia:=RecodeDate(Date, anio, mes, DaysInMonth(Now));
        // lo que realice aqui es guardar en la variable 'UltimoDia' el ultimo dia del mes

        for Proximafecha:=Now to UltimoDia do    (**)
          begin
                if  hoy=1 then   // Lunes
                  begin
                    DM.DSET_agen_turFECHA.Value:=Now; //Guardo la fecha en la tabla AGENDA
                  end;
                if  hoy=2 then   // Martes
                  begin
                    ProximaFecha:=IncDay(Date,6);
                    DM.DSET_agen_turFECHA.Value:=Proximafecha;
                  end;
                if  hoy=3 then   // Miercoles
                  begin
                    ProximaFecha:=IncDay(Date,5);
                    DM.DSET_agen_turFECHA.Value:=ProximaFecha;
                  end;
                if  hoy=4 then   // Jueves
                  begin
                    ProximaFecha:=IncDay(Date,4);
                    DM.DSET_agen_turFECHA.Value:=Proximafecha;
                  end;


Ami me salta el siguiente error al realizar el codigo en la linea (**):
Cita:
[Error] Form_registro_dia_hora.pas(1016): For loop control variable must have ordinal type
A mi entender dice que la variable para este tipo de bucle debe ser ordinal.

Trabajo con delphi 7, firebird y sql manager..

Espero su ayuda, Desde ya muchas gracias..
Responder Con Cita
  #2  
Antiguo 21-10-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Vales08.

Si no te entiendo mál, sería:
Código Delphi [-]
uses DateUtils;
...
var
  i: Integer;
begin
  for i:= DayOf(Now) to DaysInMonth(Now) do
  begin
    ...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 21-10-2011
Vales08 Vales08 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 133
Poder: 14
Vales08 Va por buen camino
Me disculpo por el error, aca les pongo bien el codigo, no me habia dado cuenta de que se me borro la ultima parte:

Código Delphi [-]
        var
          Proximafecha, UltimoDia, DiaActual:TdateTime;
          hoy:integer;
          dia, mes, anio: Word;

         ...
        hoy:=DayOfTheWeek(Date); // guardo el dia de la semana en el que se ubica la fecha actual
        DecodeDate(Now, anio, mes, dia);
        UltimoDia:=RecodeDate(Date, anio, mes, DaysInMonth(Now));
        // lo que realice aqui es guardar en la variable 'UltimoDia' el ultimo dia del mes

        for Proximafecha:=Now to UltimoDia do    (**)
          begin
                if  hoy=1 then   // Lunes
                  begin
                    DM.DSET_agen_turFECHA.Value:=Now; //Guardo la fecha en la tabla AGENDA
                  end;
                if  hoy=2 then   // Martes
                  begin
                    ProximaFecha:=IncDay(Date,6);
                    DM.DSET_agen_turFECHA.Value:=Proximafecha;
                  end;
                if  hoy=3 then   // Miercoles
                  begin
                    ProximaFecha:=IncDay(Date,5);
                    DM.DSET_agen_turFECHA.Value:=ProximaFecha;
                  end;
                if  hoy=4 then   // Jueves
                  begin
                    ProximaFecha:=IncDay(Date,4);
                    DM.DSET_agen_turFECHA.Value:=Proximafecha;
                  end;
                if  hoy=5 then   // Viernes
                  begin
                    ProximaFecha:=IncDay(Date,3);
                    DM.DSET_agen_turFECHA.Value:=Proximafecha;
                  end;
                if  hoy=6 then   // Sabado
                  begin
                    ProximaFecha:=IncDay(Date,2);
                    DM.DSET_agen_turFECHA.Value:=Proximafecha;
                  end;
                if  hoy=7 then   // Domingo
                  begin
                    ProximaFecha:=IncDay(Date,1);
                    DM.DSET_agen_turFECHA.Value:=Proximafecha;
                  end;
          end;

Gracias.
Responder Con Cita
  #4  
Antiguo 21-10-2011
Vales08 Vales08 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 133
Poder: 14
Vales08 Va por buen camino
ecfisa gracias por la respuesta..
Lo que realizas en ese codigo es recorrer desde el dia de hoy(actual) hasta el fin del mes?
Porque si asi es, seria lo que ando buscando..
Ya mismo lo pruebo
Responder Con Cita
  #5  
Antiguo 21-10-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Vales08 Ver Mensaje
Lo que realizas en ese codigo es recorrer desde el dia de hoy(actual) hasta el fin del mes?
Si Vales, eso creí entender que buscabas.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 21-10-2011
Vales08 Vales08 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 133
Poder: 14
Vales08 Va por buen camino
Muchas gracias, no me salta mas el error, ahora tengo que ver si funciona realmente como quiero.. Primero tengo que solucionar un probemita con los estados de edicion de las tablas pero eso es tema aparte.. Apenas me funcione, informo..
Muchas gracias..
Responder Con Cita
  #7  
Antiguo 21-10-2011
Vales08 Vales08 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 133
Poder: 14
Vales08 Va por buen camino
Tengo una duda mas, como realizo el contador para que se incrementen los dias del for??? por ejemplo de a 7 dias o una semana??
Responder Con Cita
  #8  
Antiguo 21-10-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Vales08 Ver Mensaje
Tengo una duda mas, como realizo el contador para que se incrementen los dias del for??? por ejemplo de a 7 dias o una semana??
Hola Vales.

La declaración for en Delphi no permite definir el incremento, vas a tener que usar una variable adicional como contador para ese fín. Pero no entiendo bién cuál es la idea que tenés como para sugerirte algo.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 21-10-2011
Vales08 Vales08 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 133
Poder: 14
Vales08 Va por buen camino
Claro, lo que sucede es que yo necesito guardar fechas que correspondan a los dias lunes, en este caso trabajo con este mes, octubre.
Entonces lo que realizo primero es saber en que dia de la semana estoy ubicada hoy.. Para eso trabajo con la funcion DayOfTheWeek.

Código Delphi [-]
hoy:=DayOfTheWeek(Date)  //Toma valores 1,2,3,4,5,6,7

Hecho esto, yo pregunto lo siguiente:
Código Delphi [-]
                if  hoy=1 then   // Lunes
                  begin
                    DM.DSET_agen_turFECHA.Value:=Now; //Guardo la fecha en la tabla AGENDA
                  end;
                if  hoy=2 then   // Martes
                  begin
                    ProximaFecha:=IncDay(Date,6);
                    DM.DSET_agen_turFECHA.Value:=Proximafecha;
                  end;
                if  hoy=3 then   // Miercoles
                  begin
                    ProximaFecha:=IncDay(Date,5);
                    DM.DSET_agen_turFECHA.Value:=ProximaFecha;
                  end;
                if  hoy=4 then   // Jueves
                  begin
                    ProximaFecha:=IncDay(Date,4);
                    DM.DSET_agen_turFECHA.Value:=Proximafecha;
                  end;
                if  hoy=5 then   // Viernes   (aca estamos ubicados hoy 21/10/2011)
                  begin
                    ProximaFecha:=IncDay(Date,3);   //aca a la fecha de hoy se le suman 3 dias que son los que faltan para llegar al proximo lunes (24/10/2011)                                         
                    DM.DSET_agen_turFECHA.Value:=Proximafecha; // se guarda 24/10/2011
                  end;
                if  hoy=6 then   // Sabado
                  begin
                    ProximaFecha:=IncDay(Date,2);
                    DM.DSET_agen_turFECHA.Value:=Proximafecha;
                  end;
                if  hoy=7 then   // Domingo
                  begin
                    ProximaFecha:=IncDay(Date,1);
                    DM.DSET_agen_turFECHA.Value:=Proximafecha;
                  end;

Hasta aca me funciona barbaro, el problema es que yo no quiero que me guarde solo el lunes proximo, sino todos los del mes y eso lo quiero realizar con el FOR.. que recorre desde el dia de hoy hasta fin de mes 31/10/2011 (ultimo lunes). Para ello necesito algo que incremente la semana sino nunca voy a llegar a fin de mes..

No se si me logras entender?.
Responder Con Cita
  #10  
Antiguo 21-10-2011
Vales08 Vales08 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 133
Poder: 14
Vales08 Va por buen camino
En conclusion necesito que se incremente la variable i, que en primer instancia tiene el valor 24, el dia de hoy, y yo quiero que pase a tener el valor 31.. el ultimo lunes del mes
Responder Con Cita
  #11  
Antiguo 21-10-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Vales.

A ver si es algo como esto...
Código Delphi [-]
...
var
  i: Integer;
  T: TDate;
begin
  T:= Now;
  for i:= DayOf(Now) to  DaysInMonth(Now) do
  begin
    case DayOfTheWeek(T) of
      1: ListBox1.Items.Add('Lunes '+IntToSTr(Dayof(T)));
      2: ListBox1.Items.Add('Martes '+IntToSTr(Dayof(T)));
      3: ListBox1.Items.Add('Miercoles '+IntToSTr(Dayof(T)));
      4: ListBox1.Items.Add('Jueves '+IntToSTr(Dayof(T)));
    end;
    T:= IncDay(T);
  end;
...

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #12  
Antiguo 21-10-2011
Vales08 Vales08 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 133
Poder: 14
Vales08 Va por buen camino
siiiii, muchisimas gracias... ya lo pruebo..
Claro tengo que utilizar otra variable porque i es entero y yo utilizando el incDay necesito variables date, sino son incompatibles..

Saludos.-
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
bucle para fechas de pagos chino150 Varios 5 19-05-2008 15:01:28
Bucle for de 2 en 2 douglas OOP 9 17-10-2007 15:55:53
bucle for utilizando fechas barrauda Varios 3 01-02-2007 17:28:49
bucle dentro de un bucle Cosgaya Varios 2 06-06-2005 07:05:16
¿Realizar una busqueda de fechas? judoboy SQL 4 23-05-2003 23:26:53


La franja horaria es GMT +2. Ahora son las 19:30:12.


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