Filtro por data

Delphi

07/12/2010

Pessoal, tenho um banco de dados feito no ACCESS, nele tenho uma campo chamado dta_recebimento que está como data/hora, e seus dados estão cadastrados assim: 17/11/2010.
Preciso fazer um filtro por intervalo de datas e está dando o seguinte erro:
"tipos de dados imcompativel na expressão do critério".

Uso o componente DateTimerPicker para escolher as datas e minha rotina está assim:
   dm.QRY_relatorio.Close;
   dm.QRY_relatorio.SQL.Clear;

   dm.QRY_relatorio.SQL.Add('SELECT * FROM telemedicina WHERE para = '+QuotedStr(Email)
   +' AND '+' data BETWEEN '+QuotedStr(FormatDateTime('dd/MM/yyyy', DTP_data1.Date))
   +' AND ' + QuotedStr(FormatDateTime('dd/MM/yyyy', DTP_data2.Date )));

   dm.QRY_relatorio.Open;



Sou novo em programação, então qualquer informação me será útil.
Marcos Barbosa

Marcos Barbosa

Curtidas 0

Respostas

Leonardo Xavier

Leonardo Xavier

07/12/2010

Seu campo data no banco de dados esta com que tipo de dados? esta do data/hora, texto, numero,...
GOSTEI 0
Marcos Barbosa

Marcos Barbosa

07/12/2010

O campo esta como data/hora
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

07/12/2010

altere a propriedade Time do DTP_data1 de modo que fique 00:00:00.
altere a propriedade Time do DTP_data2 de modo que fique 23:59:59.

depois disso, faça:

dm.QRY_relatorio.Close;

dm.QRY_relatorio.SQL.Clear;
dm.QRY_relatorio.SQL.Add('SELECT * FROM telemedicina WHERE para = :email')
dm.QRY_relatorio.SQL.Add(' and data BETWEEN :_dataini and :_datafim');

dm.QRY_relatorio.ParamByName('email').asstring := Email;
dm.QRY_relatorio.ParamByName('_dataini').asdatetime := DTP_data1.DateTime;
dm.QRY_relatorio.ParamByName('_datafim').asdatetime := DTP_data2.DateTime;

dm.QRY_relatorio.Open;
GOSTEI 0
Marcos Barbosa

Marcos Barbosa

07/12/2010

Vlw pela sua dica, eu já estava ficando com cabelos brancos por causa disso.
Precisei só fazer umas pequeninas adaptações para funcionar, pois da forma q vc colocou estava dando erro na compilação, então ficou assim:
dm.QRY_relatorio.Close;

    dm.QRY_relatorio.SQL.Clear;
    dm.QRY_relatorio.SQL.Add('SELECT * FROM telemedicina WHERE para = :email' );
    dm.QRY_relatorio.SQL.Add(' and data BETWEEN :_dataini and :_datafim');

    dm.QRY_relatorio.Parameters.ParamByName('email').Value := Email;
    dm.QRY_relatorio.Parameters.ParamByName('_dataini').Value := DTP_data1.DateTime;
    dm.QRY_relatorio.Parameters.ParamByName('_datafim').Value := DTP_data2.DateTime;


- Coloquei o Parameter antes do ParamByName
- Troquei o Asstring, AsdateTime por Value

Só isso para funcionar, mas sua dica foi muito boa mesmo, nem sei como agradeçer...
Muito Obrigado.


GOSTEI 0
POSTAR