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;
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