Pesquisa entre datas utilizando SQL
Boa Tarde!!
Alguém pode me ajudar com este dilema?? :D
Sempre fiz consulta entre datas assim
If DateTimePicker2.DateTime < DateTimePicker1.DateTime then
begin
Messagedlg(´A Data Final está maior que a Data Inicial. Informe novamente...´,mtcustom,[mbok],0);
end
Else
begin
qrbusca.Close;
qrbusca.SQL.Clear;
qrbusca.SQL.Text := ´Select * from ´TbCheck.db´ che Where datainicio between :data1 and :data2 Order by datainicio´;
qrbusca.Params[0].Asstring :=DatetoStrDateTimePicker1.DateTime);
qrbusca.Params[1].Asstring :=DatetoStrDateTimePicker2.DateTime);
end;
Acho que esse é um jeito certo de fazer essa pesquisa, mas quando vou fazer ele não traz os registros que estão entre as datas..
Ex:
Tenho 2 registros:
Data 1: 25/08/2003
Data2: 25/08/2002
Se eu colocar uma pesquisa entre 01/08/2002 e 30/08/2003 ele tem que me trazer os dois e ele não traz.. Ele só está trazendo se eu colocar a data inicial 25/08/2002 e a data final 25/08/2003..
Alguém sabe o que está acontecendo??
Obrigado
Rafaela
Alguém pode me ajudar com este dilema?? :D
Sempre fiz consulta entre datas assim
If DateTimePicker2.DateTime < DateTimePicker1.DateTime then
begin
Messagedlg(´A Data Final está maior que a Data Inicial. Informe novamente...´,mtcustom,[mbok],0);
end
Else
begin
qrbusca.Close;
qrbusca.SQL.Clear;
qrbusca.SQL.Text := ´Select * from ´TbCheck.db´ che Where datainicio between :data1 and :data2 Order by datainicio´;
qrbusca.Params[0].Asstring :=DatetoStrDateTimePicker1.DateTime);
qrbusca.Params[1].Asstring :=DatetoStrDateTimePicker2.DateTime);
end;
Acho que esse é um jeito certo de fazer essa pesquisa, mas quando vou fazer ele não traz os registros que estão entre as datas..
Ex:
Tenho 2 registros:
Data 1: 25/08/2003
Data2: 25/08/2002
Se eu colocar uma pesquisa entre 01/08/2002 e 30/08/2003 ele tem que me trazer os dois e ele não traz.. Ele só está trazendo se eu colocar a data inicial 25/08/2002 e a data final 25/08/2003..
Alguém sabe o que está acontecendo??
Obrigado
Rafaela
Rafaela
Curtidas 0
Respostas
Seek
25/08/2003
[color=blue:7954bd7b43]
Faça o seguinte:
with q1 do // q1 é a query
begin
if active then close;
sql.text := ´ Select * from tabela ´+
´ Where datainicio between :data1 and :data2 ´+
´ order by datainicio ´;
params[0].asdate := DateTimePicker1.Date; // 1a. data
params[1].asdate := DateTimePicker2.Date; // 2a. data
Open;
end;
// Tente desta maneira...
[/color:7954bd7b43]
Faça o seguinte:
with q1 do // q1 é a query
begin
if active then close;
sql.text := ´ Select * from tabela ´+
´ Where datainicio between :data1 and :data2 ´+
´ order by datainicio ´;
params[0].asdate := DateTimePicker1.Date; // 1a. data
params[1].asdate := DateTimePicker2.Date; // 2a. data
Open;
end;
// Tente desta maneira...
[/color:7954bd7b43]
GOSTEI 0
Rafaela
25/08/2003
Seek esse código não é quase igual ao outro? Tem alguma coisa diferente mas creio q dá na mesma, não dá?
GOSTEI 0
Rafaela
25/08/2003
:arrow:
GOSTEI 0
4_olho
25/08/2003
Rafaela,
você não observou, mas o Seek está tratando os dados como se deve: como datas, enquanto você os trata como ´strings´ e há de concordar que:
[b:3e01660bfd]25/05/2003[/b:3e01660bfd] é menor que [b:3e01660bfd]30/01/1900 [/b:3e01660bfd]se considerarmos isto como ´string´. Quando comparamos datas como strings, deve-se usar o layout AAAA/MM/DD e não DD/MM/AAAA.
você não observou, mas o Seek está tratando os dados como se deve: como datas, enquanto você os trata como ´strings´ e há de concordar que:
[b:3e01660bfd]25/05/2003[/b:3e01660bfd] é menor que [b:3e01660bfd]30/01/1900 [/b:3e01660bfd]se considerarmos isto como ´string´. Quando comparamos datas como strings, deve-se usar o layout AAAA/MM/DD e não DD/MM/AAAA.
GOSTEI 0