Delphi Filtrar intervalos data mês inteiro 01 à 30, banco Access

21/03/2020

0

Bom dia amigos !

Por favor !
Tenho um sistema de cadastro com banco de dados access, neste banco eu tenho um tabela chamada: cpagam, e nesta

tabela um campo chamado: data_pg, gostaria com ajuda dos colegas criar um filtro onde eu consiga filtrar intervalos de

valores:
EX: tenho neste campo data_pg, datas da seguinte forma:

Janeiro
01/01/2020 04:10:40
02/01/2020 07:10:00
03/01/2020 08:10:40
04/01/2018 09:10:40
fevereiro
01/02/2020 11:10:40
02/02/2020 12:10:40
03/02/2020 13:10:40
março
01/03/2020 14:10:40
02/03/2020 15:10:40
03/03/2020 18:10:40

Como exemplo Gostaria de filtra todas a datas de um mês inteiro
EX: FEVEREIRO

01/02/2020 11:10:40
02/02/2020 12:10:40
03/02/2020 13:10:40

OBS.: utilizo
Data Module =========================== DM
ADOConnect = conexão com banco = Access = banco
ADOQuery = para consultas =============== cpagam

===========SQL String============

select*from cpagam where data_pg
order by data_pg


=========botão pesquisar==========

var
Data1,Data2 : string;

begin
If DateTimePicker2.Date < DateTimePicker1.Date Then
begin
ShowMessage(''Intervalo de datas inválido. A data inicial não pode ser posterior a data final!'');
DateTimePicker2.Date := DateTimePicker1.Date;
end
else
begin
Data1 := DateToStr(DateTimePicker1.Date);
Data2 := DateToStr(DateTimePicker2.Date);

With DM.cpagam do
begin
Close;
SQL.Clear;
SQL.Text := ''SELECT * FROM cpagam WHERE data_pg >= :pData1 AND data_pg <= :pData2 '';
Parameters.ParamByName(''pData1'').Value := StrToDate(Data1);
Parameters.ParamByName(''pData2'').Value := StrToDate(Data2);
Prepared;
Open;

Obs.: como teste eu já utilizo o filtro acima, porem, tem algo errado, se filtrar uma data intervalo
EX: de: 01/02/2020 à 01/03/2020
o resultado que eu tenho é esse:
01/02/2020,
01/01/2020,
01/03/2020,
parece que ele pega apenas o dia 01 e trás tudo daquele campo com dia 01.

Desde já agradeço ajuda !!
Natanael Oliveira

Natanael Oliveira

Responder

Posts

21/03/2020

Emerson Nascimento

var
  dia, mes, ano: word;
begin
  DecodeDate(DateTimePicker1.Date,ano,mes,dia);
  with DM.cpagam do
  begin
    Close;
    SQL.Clear;
    SQL.Text := 'SELECT * FROM cpagam WHERE year(data_pg) = :pAno and month(data_pg) = :pMes';
    Parameters.ParamByName('pAno').AsInteger := ano;
    Parameters.ParamByName('pMes').AsInteger := mes;
    Prepared;
    Open;
  end;
end;
Responder

21/03/2020

Natanael Oliveira

var
  dia, mes, ano: word;
begin
  DecodeDate(DateTimePicker1.Date,ano,mes,dia);
  with DM.cpagam do
  begin
    Close;
    SQL.Clear;
    SQL.Text := 'SELECT * FROM cpagam WHERE year(data_pg) = :pAno and month(data_pg) = :pMes';
    Parameters.ParamByName('pAno').AsInteger := ano;
    Parameters.ParamByName('pMes').AsInteger := mes;
    Prepared;
    Open;
  end;
end;



Boa tarde amigo !

agradeço pela ajuda, o problema acima resolvi mudando o tipo de dados no campo da tabela de : texto/curto, para: data/hora...resolveu meu problema.....meu problema acima foi resolvido ,muito grato pela sua ajuda !!!
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar