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 31-01-2012
pape19 pape19 is offline
Miembro
 
Registrado: jul 2010
Posts: 96
Poder: 14
pape19 Va por buen camino
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!
Responder Con Cita
  #2  
Antiguo 31-01-2012
MartinS MartinS is offline
Miembro
NULL
 
Registrado: nov 2011
Ubicación: Villa Cacique - Argentina
Posts: 283
Poder: 13
MartinS Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 31-01-2012
pape19 pape19 is offline
Miembro
 
Registrado: jul 2010
Posts: 96
Poder: 14
pape19 Va por buen camino
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!
Responder Con Cita
  #4  
Antiguo 31-01-2012
MartinS MartinS is offline
Miembro
NULL
 
Registrado: nov 2011
Ubicación: Villa Cacique - Argentina
Posts: 283
Poder: 13
MartinS Va por buen camino
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 .-

Saludos
Responder Con Cita
  #5  
Antiguo 01-02-2012
pape19 pape19 is offline
Miembro
 
Registrado: jul 2010
Posts: 96
Poder: 14
pape19 Va por buen camino
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ó.
Responder Con Cita
  #6  
Antiguo 01-02-2012
MartinS MartinS is offline
Miembro
NULL
 
Registrado: nov 2011
Ubicación: Villa Cacique - Argentina
Posts: 283
Poder: 13
MartinS Va por buen camino
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
Responder Con Cita
  #7  
Antiguo 01-02-2012
pape19 pape19 is offline
Miembro
 
Registrado: jul 2010
Posts: 96
Poder: 14
pape19 Va por buen camino
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!
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
Ayuda SQL Between con rango de fechas darkbits SQL 16 26-07-2010 21:20:37
Filtro Rango de Fechas Lenny Conexión con bases de datos 2 17-02-2010 21:38:23
Rango de fechas chino150 Varios 17 08-02-2008 20:17:39
Rango de fechas roberasturias Varios 2 23-05-2005 18:02:35
Rango de fechas JODELSA Varios 8 22-05-2003 20:45:43


La franja horaria es GMT +2. Ahora son las 08:54:21.


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