Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Como hacer un filtro con meses (https://www.clubdelphi.com/foros/showthread.php?t=5866)

Ricsato 08-12-2003 23:58:27

Como hacer un filtro con meses
 
Hola a todo el mundo, quiero que alguien me ayude en la siguiente duda?

Como puedo hacer un filtro de un query, para un campo tipo fecha, pero donde solo requiero filtrar los registros por un mes especifico, por ejemplo, si tengo....

Actual:=DateTimePicker1.Date;
DecodeDate(Actual, Year, Month, Day);
....
Query1.Filter:='Fecha=' + ???

La fecha la obtengo desde un datatimepicker, separo el numero de mes con decode, pero no se como especificar en el filtro, que unicamente me filtre todos los registros con el mes leido, sin importar el dia y el año.

Saludos desde Mexicali, B.C.

Ruben_Cu 09-12-2003 00:47:58

Hola Ricsato, para lograr lo que quieres debes combinar el procedimiento DecodeDate con la función Extract de SQL el código quedaria mas o menos así:
Código:

procedure TForm1.Button1Click(Sender: TObject);
var day, month, year:word;
        actual:TDateTime;
begin
        Actual:=DateTimePicker1.Date;
        DecodeDate(Actual, Year, Month, Day);
        with query1 do begin
        close;
        sql.Clear;
        sql.Add('select * from TuTabla');
        sql.Add('Where (Extract(Month from Fecha) ='+QuotedStr(IntToStr(month))+')');
        open;
        end;
end;

Fijate que no uso la propiedad filter es preferible hacerlo con declaraciones de SQL por ser mas rápido y entonces si tiene sentido el uso del TQuery de lo contrario podías haber usado un TTable en su lugar.
Incluso puedes usar en lugar del botón el evento OnChange del DateTimePicker.
Saludos y suerte

marcoszorrilla 09-12-2003 07:55:31

La solución ya te la ha dado Rubén, pero quiero hacer una observación, si tienes en la tabla fechas de años distintos, no obtendrás el mes del año actual, sino todos los meses 8 por ejemplo que existan en la tabla, si ocurre este caso que estoy citando, tendrías que filtrar entre el 1 del mes solicitado y el final del mes del mismo, que solamente tendrías que hallarlo, entonces quedaría el filtro de las fechas:
Where MiFecha Between xxx And xxx.


Un Saludo.

Ruben_Cu 09-12-2003 14:07:16

Cita:

Ricsato comentó:
...que unicamente me filtre todos los registros con el mes leido, sin importar el dia y el año.

Saludos desde Mexicali, B.C.

Hola Marcos, como ves a Ricsato no le importan ni los días ni los años por lo que le propuse lo que creo mejor a su objetivo sin considerar el uso del predicate Between.
Un saludo


La franja horaria es GMT +2. Ahora son las 18:38:33.

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