Fórum Erro na filtragem entre datas #301583

03/11/2005

0

:?: queria saber o que esta errado tenho dois componetes ´DateTimePicker´ datainicial e datafinal.
no componete adoqurey eu deixo dessa forma
SELECT * FROM TABELA
WHERE DATA BETWEEN :DATAINI AND :DATAFIN

eu uso banco de dados access
e no button adiciono este evento

adoquery.close;
adoquery.Parameters[0].Value := datainicial.date;
adoquery.Parameters[1].Value := datafinal.date;
adoquery.open

so o que acontece quando eu faço uma comparação maiores de 2 anos ele me retornar datas que não estão nesse paramentro sempre filtra datas maiores que a data final.
ex: datainicial 17/11/2003 e data final 17/11/2005 o resultado seria no dbgrid;
05/12/2003
10/04/2004
20/12/2005----obs que esta data e maior que data final


E outra coisa e que se a datainicial for ingual ex: 03/11/2005 e tiver algum registro tambem com essa data ele não me amostra no dbgrid :!:


Geomicro

Geomicro

Responder

Posts

03/11/2005

Marlon Spiess

Olá,
usando ´WHERE DATA BETWEEN :DATAINI AND :DATAFIN´ o filtro será sempre ´entre´ as datas informadas, pra corrigir isso vc pode usar ´WHERE DATA >= :DATAINI AND DATA <= :DATAFIN´.
Qto ao fato de estar saíndo alem do limite, verifique no objeto query o tipo de data informado para os parametros, tente trocar ´adoquery.Parameters[0].Value =´ por ´adoquery.Parameters[0].AsDate =´

Espero ter ajudado


Responder

Gostei + 0

03/11/2005

Geomicro

á tentei usa este comando ´parametros, tente trocar ´adoquery.Parameters[0].Value =´ por ´adoquery.Parameters[0].AsDate =´
So que ele não me da esta opção de coloca ´ASDATE´ o campo da tabela e tipo ´Data´ e do parameters tambem e do tipo ´DATETIME´ e tambem ele não medar a opção de coloca so ´DATE´.
o que eu poderia fazer para resolver vc teria alguma ideia


Responder

Gostei + 0

03/11/2005

Geomicro

amigo fez o teste da primeira dica que vc passou so que ele não esta informando os dados corretos por exemplo
se a data final for 03/11/2005 e no banco de dados tiver a mesma data ele não informa, so se eu colocar + 8 dias na frete na data final ex 11/11/2005 ai ele informa o dados da data 03/11/2005
o que poderia ser este erro


Responder

Gostei + 0

03/11/2005

Okama

Geralmente o TDatetimePicker passa o valor como DateTime ou seja também passa a hora quando se referencia o valor.

Uma dica para resolver esse problema é formatar a data antes de enviá-la ao SQL e fornecer como String:

Ex.

var DataINI, DataFIM : String;
begin

DataINI := FormatDateTime( ´mm/dd/yyyy´, DataTimePicker1.date);
DataFIM := FormatDateTime( ´mm/dd/yyyy´, DataTimePicker2.date);

AdoQuery1.SQL.Text := ´Select * from Tabela where Data between ´ +
QuotedSTr( DataINI ) + ´ and ´+ QuotedStr( DataFIM );
AdoQuery1.Open;


Responder

Gostei + 0

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

Aceitar