Filtro por data

Delphi

27/08/2007

Pessoal,

Preciso fazer um filtro por data, mas está dando erro. Estou utilizando um componente MaskEdit cuja data que desejo filtrar será digitada. Porém, logo no primeiro dígito aparece uma mensagem de erro. O banco utilizado é Access e tanto o campo da tabela quanto o componente TMaskEdit possuem a máscara ´00/00/0000;0;´. Agradeço quem puder me ajudar nessa questão.

Segue abaixo o código:

procedure TFrmPesquisa.MskEdtDatNasChange(Sender: TObject);
var
Data: TDateTime;
begin
DmSeguros.TbSegurados.IndexName := ´DATNAS´;
Data := strtodate(MskEdtDatNas.Text); // O erro ocorre aqui!!!
with QryPesquisa do
begin
QryPesquisa.Close;
QryPesquisa.Sql.Clear;
QryPesquisa.Sql.Add(´Select * from Segurados Where DatNas = :Data Order By NomSeg´);
QryPesquisa.ParamByName(´Data´).AsDate := strtodate(MskEdtDatNas.Text);
QryPesquisa.Open;
if QryPesquisa.IsEmpty then
MessageDlg(´Não existem dados.´, mtInformation, [mbOk], 0);
end;
end;


Sgrandini

Sgrandini

Curtidas 0

Respostas

Daykas

Daykas

27/08/2007

Var
Inicio: String;
Final: String;
begin
If Datetimepicker2.Date < Datetimepicker1.Date Then
begin
ShowMessage(´Intervalo de datas inválido, a data inicial é maior que a data final!´);
Datetimepicker2.Date := Datetimepicker1.Date;
end
Else
begin
Inicio := DateToStr(Datetimepicker1.Date);
Final := DateToStr(Datetimepicker2.Date);
query1.Close;
query1.SQL.Clear;
query1.SQL.Text := ´SELECT * FROM boleto WHERE dtpagto >=:pInicial and dtpagto<=:pFinal ORDER BY dtpagto ASC´;
query1.ParamByName(´pInicial´).AsDateTime := StrToDate(Inicio);
query1.ParamByName(´pFinal´).AsDateTime := StrToDate(Final);
query1.Open;
messagedlg(IntToStr(query1.RecordCount)+´ registros encontrados no filtro,mtinformation,[mbok],0);
end;


Divirta-se ai amigo!


GOSTEI 0
Sgrandini

Sgrandini

27/08/2007

Obrigada daykas pela ajuda, mas eu não utilizo período de datas com o componente DateTimePicket. Eu uso apenas um componente MaskEdit, onde o usuário deverá digitar a data (data nascimento), que após o clique num botão, mostrará no DBGrid somente as pessoas que possuírem a data digitada no componente. É isso que não estou conseguindo resolver.


GOSTEI 0
Daykas

Daykas

27/08/2007

Var
dt_nasc: String;
begin
dt_nasc := maskedit1.text;
query1.Close;
query1.SQL.Clear;
query1.SQL.Text := ´SELECT * FROM mailing_contato WHERE dt_nasc >=:pdt_nasc order by nome asc´;
query1.ParamByName(´pdt_nasc´).AsDateTime := StrToDate(dt_nasc);
query1.Open;
showmessage(´Registros: ´ + IntToStr(query1.RecordCount));


Divirta-se!!!


GOSTEI 0
Sgrandini

Sgrandini

27/08/2007

Obrigada daykas pela ajuda. Consegui resolver de outra forma, mas o seu código me foi e será ainda muito útil.

Obrigada mais uma vez.


GOSTEI 0
POSTAR