Ver Mensaje Individual
  #1  
Antiguo 01-07-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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
Responder Con Cita