Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Control Rango de Fechas (https://www.clubdelphi.com/foros/showthread.php?t=77484)

pape19 31-01-2012 13:02:24

Control Rango de Fechas
 
Bueno forerossss, esta vez viene fácil la pregunta, me hago cargo :)

Lo que necesito es algún método eficiente de poder controlar que la Fecha de mi DateTimePicker2 sea mayor que la del 1, y que el programa no siga su ejecución y quede "parado" ahí, hasta que la fecha 2 sea mayor a la fecha 1.

Propuestas??? Muchas gracias!

MartinS 31-01-2012 16:44:23

Hola: No se bien si haces el procedimiento despues de hacer click sobre algun boton, en ese caso yo haria asi:

Código Delphi [-]
  If DateTimePicker2.Datetime >= DateTimePicker1.DateTime+1 then
  Begin
      //  lo que debe hacer 
  end else
  Begin
     // Mensaje que no se puede pq es menor y...
     DateTimePicker2.SetFocus  // dar foco al que hay que corregir.
  End

Saludos

pape19 31-01-2012 20:05:52

De verdad agradezco tu respuesta. Pero no he podido solucionar mi problema.

Yo tengo que controlar que la segunda fecha del rango sea mayor que la primera. Y que no siga ejecutando hasta que esto no pase.

Con lo que me propusiste, cuando no se cumpla la condición, y pase por la parte del setfocus, lo que hará será salir del If, dando foco al DateTimePicker, pero sigue la ejecución de los siguientes Procedure, y devuelve un resultado.

Necesito alguna manera de cortar la ejecución hasta que la fecha1 sea menor que la fecha2. Gracias!

MartinS 31-01-2012 20:49:33

Hola. Podrias pones el codigo que haces asi podemos ver que es lo que ocurre? Ya que se puede abortar la ejecucion y otras tantas seguir pero aqui necesitamos el bendito codigo para decifrar que y como debes hacer .-:confused:

Saludos

pape19 01-02-2012 13:02:54

Código Delphi [-]
Procedure TConsultas.EjecucionPorFecha(); 
Var
VarFecha1, VarFecha2:string;
Begin
If DateTimePicker2.Date > DateTimePicker1.Date then
    Begin
        VarFecha1:=FormatDateTime('mm/dd/yy', DateTimePicker1.Date);
        VarFecha2:=FormatDateTime('mm/dd/yy', DateTimePicker2.Date);
        IBQuery1.SQL.Add('AND D.FECHA >= ' + '''' + VarFecha1 + '''' );
        IBQuery1.SQL.Add('AND D.FECHA <= ' + '''' + VarFecha2 + '''' );
    End
  else
    Begin
        showmessage('La segunda fecha del rango es menor a la primera');
        DatetimePicker2.SetFocus;
    end;

Procedure TConsultas.Excedidos(); //solo los registros que se hayan excedido en el tiempo permitido
Begin
    IBQuery1.SQL.Add('AND LEFT(D.EXCEDENTE, 1) =' + '''' + '+' +'''');
End;

procedure TConsultas.Button1Click(Sender: TObject);
begin
If (CheckBox1.Checked=False) and (CheckBox2.Checked=True) and (CheckBox3.Checked = True) then
                               Begin
                                    TotalRegistros();
                                    EjecucionPorFecha();
                                    Excedidos();
                                    Ordenar();
                                    IBQuery1.Open;
                              End;
End;

Aca tengo una parte del código, como se ve, hay 3 procedimientos. El primero es el que aporta a la query la parte del rango de fechas. Ahi es donde debe cortar la ejecución, hasta que la fecha2 sea mayor a la fecha1, ya que sino, como se ve en el procedimiento 3, sigue ejecutando(Excedidos(), Ordenar()), y devuelve un resultado, que es erróneo, ya que lo de las fechas no se corroboró.

MartinS 01-02-2012 13:27:07

Hola: Como puedo apreciar (Puedo esta equivocado) las fechas se la pones a mano antes de la ejecucion de las instrucciones del button1. Lo que deberias hacer es la comprobacion antes de ejecutar las sentencias asi:


Código Delphi [-]
procedure TConsultas.Button1Click(Sender: TObject);
Var
VarFecha1, VarFecha2:string;
begin
        // aca la comprobacion
        If DateTimePicker2.Date < DateTimePicker1.Date then   // Cambio sentido de mayor a menor
        Begin
            showmessage('La segunda fecha del rango es menor a la primera');
            DatetimePicker2.SetFocus;
        end     
        else
        Begin 
          VarFecha1:=FormatDateTime('mm/dd/yy', DateTimePicker1.Date);
          VarFecha2:=FormatDateTime('mm/dd/yy', DateTimePicker2.Date);
          IBQuery1.SQL.Add('AND D.FECHA >= ' + '''' + VarFecha1 + '''' );
          IBQuery1.SQL.Add('AND D.FECHA <= ' + '''' + VarFecha2 + '''' );
          If (CheckBox1.Checked=False) and (CheckBox2.Checked=True) and (CheckBox3.Checked = True) then
                               Begin
                                    TotalRegistros();
                                    EjecucionPorFecha();  // <----- Elimina esta linea
                                    Excedidos();
                                    Ordenar();
                                    IBQuery1.Open;
                              End;
       end;
End;


Asi la ejecucion directamente no arrancara hasta tanto la segunda fecha no sea mayor que la primera. Si no es esto lo que necesitabas, avisa y volvemos a intentarlo.- ;)

Saludos

pape19 01-02-2012 15:10:41

Como pusiste en el ejemplo, cambiaría toda la funcionalidad de mi ejecución; ya que lo que hago, es ir concatenando una única Query en base a varios parámetros que dependen de CheckBox.

Igualmente, entiendo lo difícil que es buscar una solución sin tener demasiada idea del código completo, o de la manera en que está diseñado el el mismo, y amoldar una solución a eso.

Lo que plantié terminó siendo más complicado de lo que imaginé, supuse que había alguna manera de volver arriba en el procedimiento, para volver a ejecutar lo que no paso. (Como un goto en Pascal).

Igualmente terminé solucionando mi problema de una manera bastante sencilla. Programe el evento CloseUp, de mi DateTimePicker2, donde establezco ahi el control de fechas. Si al ejecutarse el evento la fecha 1 es mayor que la 2, la fecha 2 le asigno el valor de la 1, y el evento da la posibilidad de volver a seleccionar la fecha del DateTimePicker2 sin seguir ejecutando nada.

Agradezco mucho tu ayuda, un abrazo!


La franja horaria es GMT +2. Ahora son las 11:46:56.

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