Erro na filtragem entre datas
:?: 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 :!:
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
Curtidas 0
Respostas
Marlon Spiess
03/11/2005
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
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
GOSTEI 0
Geomicro
03/11/2005
á 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
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
GOSTEI 0
Geomicro
03/11/2005
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
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
GOSTEI 0
Okama
03/11/2005
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;
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;
GOSTEI 0