Filtro por data
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;
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
Curtidas 0
Respostas
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!
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
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
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!!!
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
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.
Obrigada mais uma vez.
GOSTEI 0