Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Error al filtrar una fecha entre un rango de fechas (https://www.clubdelphi.com/foros/showthread.php?t=80680)

dec 01-07-2006 01:01:41

Error al filtrar una fecha entre un rango de fechas
 
Supongamos que hemos obtenido un rango de fechas através de nuestra aplicación y queremos mediante una consulta ver que registros se encuentra dentro de estas fechas, según un campo que tengamos declarado en esta tabla.

Lo más correcto sería construir una consulta SQL en la que se le pasasen como parámetros las dos fechas del rango, quedando algo del estilo de:

Código SQL [-]
SELECT CAMPOS FROM TABLA WHERE FECHA BETWEEN :FECHAPARAMETRO1 AND :FECHAPARAMETRO2

O la equivalente aunque más rápida:

Código SQL [-]
SELECT CAMPOS FROM TABLA WHERE FECHA>=:FECHAPARAMETRO1 AND FECHA<=FECHAPARAMETRO2

Ahora bien centremonos en los problemas, a parte del problema evidente de eficiencia y velocidad pues estaríamos requiriendo al servidor todos los registros y filtrandolos en el cliente, que se pueden producir si esta validación se produciese fuera, dentro de nuestra aplicación en delphi.

Imaginemos el siguiente código:

Código Delphi [-]
  While Not cdInmexsa.qInv.Eof Do
    Begin
      dFecha := cdInmexsa.qInv.Fields[nPosFBDP].AsDateTime;

      //Los Añade a la Lista y Avanza al Siguiente.
      If (dFecha >= dFIni) And (dFecha <= dFFin) Then
        slPartidas.Add(cdInmexsa.qInv.Fields[nPosPartBDP].AsString);
     cdInmexsa.qInv.Next;
    End;

Bien en este caso pudiera ser que muchos registro que aunque estuviesen dentro del rango de fechas no serían validados y añadidos a la lista como que cumplen con la condición.

¿Por qué?

Pues por que si hemos cometido el error de declarar las variables dfIni y dfFin sin datos
temporales nPosFBDP podría estar fuera de rango por tiempo.

Pongamos un ejemplo:

Código:

nPosFBDP = 24/02/2001 09:37:00
dfIni = 01/01/2001 00:00:00
dfFin = 24/02/2001 00:00:00



La franja horaria es GMT +2. Ahora son las 06:59:36.

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