Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > Trucos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Los mejores trucos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #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
Poder: 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
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 20:58:53.


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