Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Filtrado de fecha en SQL Sobre access(Permisivo) (https://www.clubdelphi.com/foros/showthread.php?t=85711)

Edwardfeliz 22-04-2014 06:12:43

Filtrado de fecha en SQL Sobre access(Permisivo)
 
Explico el titulo:

Tengo el siguiente filtrado por SQL:
Código Delphi [-]
begin
with adoquery1 do
begin
close;
SQL.clear;
SQL.Add('Select * from Productos');
SQL.Add('where fecha_Vencimiento >= :Fecha1  AND fecha_Vencimiento <= :Fecha2');
Parameters.ParamByName('Fecha1').Value:= FormatDateTime('dd/mm/yyyy',Datetimepicker1.Date);
Parameters.ParamByName('Fecha2').Value:= FormatDateTime('dd/mm/yyyy',Datetimepicker2.Date);
Open;
end;
end;

tengo dos productos 'A' y 'B'.

el producto A: fecha de vencimiento 23/04/2014
el producto B: fecha de vencimiento 25/05/2014

cuando en el DTP 1 esta la fecha 22/04/2014 y en el DTP 2 esta la fecha 24/04/2014, se filtra bien, y solo muestra un solo registro como debe ser.

Peroooo... cuando el en DTP 2 esta la fecha 25/04/2014, me salen las dos, es decir A y B y B no debe salir porque es del mes 5 no 4

Porque solo toma en cuenta los dias del mes?
Alguien tiene idea de porque? :confused:

Saludos!

nlsgarcia 22-04-2014 06:43:56

Club Delphi,

Cita:

Empezado por Edwardfeliz
...¿Porque solo toma en cuenta los días del mes?...

Las comparaciones de fecha deben hacerse en formato "yyyy/mm/dd"

Revisa este código:
Código Delphi [-]
with adoquery1 do
begin
   Close;
   SQL.Clear;
   SQL.Add('Select * From Productos');
   SQL.Add('Where Fecha_Vencimiento Between :Fecha1 And :Fecha2');
   Parameters.ParamByName('Fecha1').Value:= FormatDateTime('yyyy/mm/dd',Datetimepicker1.Date);
   Parameters.ParamByName('Fecha2').Value:= FormatDateTime('yyyy/mm/dd',Datetimepicker2.Date);
   Open;
end;
Espero sea útil :)

Nelson.

Edwardfeliz 22-04-2014 15:01:34

Cita:

Empezado por nlsgarcia (Mensaje 475404)
Club Delphi,


Las comparaciones de fecha deben hacerse en formato "yyyy/mm/dd"

Revisa este código:
Código Delphi [-]
with adoquery1 do
begin
   Close;
   SQL.Clear;
   SQL.Add('Select * From Productos');
   SQL.Add('Where Fecha_Vencimiento Between :Fecha1 And :Fecha2');
   Parameters.ParamByName('Fecha1').Value:= FormatDateTime('yyyy/mm/dd',Datetimepicker1.Date);
   Parameters.ParamByName('Fecha2').Value:= FormatDateTime('yyyy/mm/dd',Datetimepicker2.Date);
   Open;
end;
Espero sea útil :)

Nelson.

el filtrado se queda vacio.

Saludos!

ecfisa 22-04-2014 15:47:33

Hola Edwardfeliz.

No me explico el comportamiento que comentas... La lógica de tu condicional es correcta y de echo funciona bién:



El formato de fecha general para Access es, mm/dd/aa dentro de EEUU y dd/mm/aaaa en otro caso. Y a menos que hayas definido un formato personalizado, usará los valores especificados en la configuración regional de Windows.

Es decir que también podrías hacer:
Código Delphi [-]
   ...
   Parameters.ParamByName('FECHA1').Value:= FormatDateTime(ShortDateFormat, DateTimePicker1.Date);
   Parameters.ParamByName('FECHA2').Value:= FormatDateTime(ShortDateFormat, DateTimePicker2.Date);

Saludos :)

Edwardfeliz 22-04-2014 16:00:36

Cita:

Empezado por ecfisa (Mensaje 475428)
Hola Edwardfeliz.

No me explico el comportamiento que comentas... La lógica de tu condicional es correcta y de echo funciona bién:



El formato de fecha general para Access es, mm/dd/aa dentro de EEUU y dd/mm/aaaa en otro caso. Y a menos que hayas definido un formato personalizado, usará los valores especificados en la configuración regional de Windows.

Es decir que también podrías hacer:
Código Delphi [-]
   ...
   Parameters.ParamByName('FECHA1').Value:= FormatDateTime(ShortDateFormat, DateTimePicker1.Date);
   Parameters.ParamByName('FECHA2').Value:= FormatDateTime(ShortDateFormat, DateTimePicker2.Date);

Saludos :)

entonces es el destino .-. mira:



no se que hacer y mira el codigo:

Código Delphi [-]
procedure TFprincipal.bvencerClick(Sender: TObject);
begin
with adoquery1 do
begin
   Close;
   SQL.clear;
   SQL.Add('Select * from Productos');
   SQL.Add('where fecha_Vencimiento >= :Fecha1  AND fecha_Vencimiento <= :Fecha2');
   Parameters.ParamByName('FECHA1').Value:= FormatDateTime(ShortDateFormat, DateTimePicker1.Date);
   Parameters.ParamByName('FECHA2').Value:= FormatDateTime(ShortDateFormat, DateTimePicker2.Date);
   Open;
end;
end;

:confused::(

Prueba con dos días mas en tu ejemplo.
Saludos!

ecfisa 22-04-2014 17:04:34

Hola Eduardfeliz.
Cita:

Empezado por Edwardfeliz (Mensaje 475429)
...
Prueba con dos días mas en tu ejemplo.

No creo que dependa de la amplitud de la toma, en este caso usé el rango 01/04/2014 - 24/05/2014 y sigue filtrando de modo correcto:


Si estas en etapa de pruebas y todavía no tenes información relevante o podes hacer una copia reducida de la tabla, sería interesante que la adjuntaras para poder realizar las pruebas sobre ella.

Saludos :)

Edwardfeliz 22-04-2014 17:34:21

Cita:

Empezado por ecfisa (Mensaje 475432)
Hola Eduardfeliz.

No creo que dependa de la amplitud de la toma, en este caso usé el rango 01/04/2014 - 24/05/2014 y sigue filtrando de modo correcto:


Si estas en etapa de pruebas y todavía no tenes información relevante o podes hacer una copia reducida de la tabla, sería interesante que la adjuntaras para poder realizar las pruebas sobre ella.

Saludos :)

Acertaste, el problema estaba en la base de datos, el tipo de campo donde estaba la fecha era de texto.

:mad::mad::mad::mad: v\||/v\||/v\||/

Saludos!

nlsgarcia 22-04-2014 18:10:40

Edwardfeliz,

Cita:

Empezado por Edwardfeliz
...el problema estaba en la base de datos, el tipo de campo donde estaba la fecha era de texto...

:) ^\||/

Nelson.


La franja horaria es GMT +2. Ahora son las 23:10:49.

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