Filtro por data
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:
Sou novo em programação, então qualquer informação me será útil.
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
Curtidas 0
Respostas
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
07/12/2010
O campo esta como data/hora
GOSTEI 0
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;
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
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:
- 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.
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