Busca com data no sql (ADOQuery) retorna valores errados
Boa tarde pessoal!
Estou desenvolvendo uns relatórios pra um sistema e estou com um elefante gigantesco pra resolver...
To usando delphi 7, ADO e DB Access.
Ao realizar o select para gerar o relatório está ocorrendo alguma irregularidade... estou fazendo isso:
Porém ao realizar este select ele não trazia os dados do dia inicial, por exemplo, na tabela do BD eu tenho um registro do dia 26, se eu coloco para trazer de 26 a 28 ele vai trazer os registro de 27 e 28...
No Banco de Dados o campo data está como data completa DD/MM/YYYY HH:HH...
Tentei utilizar o between no select porém também não obtive sucesso...
aí, resolvi retirar um dia da data de início para que ele, ao dar o select, trazer os dados que eu precisava.. aí eu coloquei:
Funcionou!
Porémm... se eu colocar um período que passe de um mês ao outro, por exemplo, dt inicial 20/12/2011 e dt final 20/01/2012 ele não traz resultado nenhum...
O que pode estar ocorrendo??
Muitíssimo grato!
Henrique
Estou desenvolvendo uns relatórios pra um sistema e estou com um elefante gigantesco pra resolver...
To usando delphi 7, ADO e DB Access.
Ao realizar o select para gerar o relatório está ocorrendo alguma irregularidade... estou fazendo isso:
QueryAnalise.Close; QueryAnalise.SQL.Clear; QueryAnalise.SQL.Add(Select * from Analise where Retorno >= :dInicio and Retorno <= :dFim); QueryAnalise.Parameters.ParamByName(dInicio).Values := dt_inicio; QueryAnalise.Parameters.ParamByName(dFim).Values := dt_fim; QueryAnalise.Open;
Porém ao realizar este select ele não trazia os dados do dia inicial, por exemplo, na tabela do BD eu tenho um registro do dia 26, se eu coloco para trazer de 26 a 28 ele vai trazer os registro de 27 e 28...
No Banco de Dados o campo data está como data completa DD/MM/YYYY HH:HH...
Tentei utilizar o between no select porém também não obtive sucesso...
aí, resolvi retirar um dia da data de início para que ele, ao dar o select, trazer os dados que eu precisava.. aí eu coloquei:
QueryAnalise.Close; QueryAnalise.SQL.Clear; QueryAnalise.SQL.Add(Select * from Analise where Retorno >= :dInicio and Retorno <= :dFim); QueryAnalise.Parameters.ParamByName(dInicio).Values := dt_inicio-1; QueryAnalise.Parameters.ParamByName(dFim).Values := dt_fim; QueryAnalise.Open;
Funcionou!
Porémm... se eu colocar um período que passe de um mês ao outro, por exemplo, dt inicial 20/12/2011 e dt final 20/01/2012 ele não traz resultado nenhum...
O que pode estar ocorrendo??
Muitíssimo grato!
Henrique
Henrique
Curtidas 0
Respostas
Tiago Soares
31/01/2012
Que banco vc esta utilizando e qual é o valor que esta passando na variavel dt_inicio?
GOSTEI 0
Henrique
31/01/2012
o BD é o Access..
o valor que estou passando para o dt_inicio é este:
tentei isso também..
e ao jogar este valor para um caption ele mostra a data um dia antes corretamente...
o valor que estou passando para o dt_inicio é este:
dt_inicio := DataTimerPicker1.Date;
tentei isso também..
dt_inicio := DataTimerPicker1.Date-1;
e ao jogar este valor para um caption ele mostra a data um dia antes corretamente...
GOSTEI 0
Tiago Soares
31/01/2012
Tenta
ou
QueryAnalise.Parameters.ParamByName(dInicio).asDateTime := strtodatetime(FormatDateTime(dd/MM/yyyy 00:00:00,DataTimerPicker1.Date));
ou
QueryAnalise.Parameters.ParamByName(dInicio).asDateTime := DataTimerPicker1.Datetime;
GOSTEI 0
Henrique
31/01/2012
o .asDateTime não funciona no ADOQuery...
tem que colocar algo na clausula uses?
além de DB, DataUtils, ADODB???
tem que colocar algo na clausula uses?
além de DB, DataUtils, ADODB???
GOSTEI 0
Tiago Soares
31/01/2012
Tente assim
não sei se tem que declarar no uses pq nao uso ADO.
caso nao funcione com asString tente com Value msm
não sei se tem que declarar no uses pq nao uso ADO.
caso nao funcione com asString tente com Value msm
QueryAnalise.Parameters.ParamByName(dInicio).asString := FormatDateTime(dd/MM/yyyy 00:00:00, DataTimerPicker1.Date);
GOSTEI 0
Henrique
31/01/2012
Perfeito! isso mesmo!
Valew!
Valew!
GOSTEI 0
Tiago Soares
31/01/2012
por nada
GOSTEI 0
Henrique
31/01/2012
Na vdd não deu certo não...
Por engano meu coloque no dt_inicio o DataTimePicker2, que é o da data final, e não sei o porque deu certo...
agora voltou a dar errado..
ele seleciona todos os dias do intervalo menos o dia da data inicial...
tá dificil... srsr
Por engano meu coloque no dt_inicio o DataTimePicker2, que é o da data final, e não sei o porque deu certo...
agora voltou a dar errado..
ele seleciona todos os dias do intervalo menos o dia da data inicial...
tá dificil... srsr
GOSTEI 0
Tiago Soares
31/01/2012
QueryAnalise.Parameters.ParamByName(dInicio).asString := FormatDateTime(dd/MM/yyyy 00:00:00, DataTimerPicker1.Date);
QueryAnalise.Parameters.ParamByName(dFim).asString := FormatDateTime(dd/MM/yyyy 00:00:00, DataTimerPicker2.Date);
QueryAnalise.Parameters.ParamByName(dFim).asString := FormatDateTime(dd/MM/yyyy 00:00:00, DataTimerPicker2.Date);
GOSTEI 0
Henrique
31/01/2012
Tinha testado assim já... e continua com erro...
quando coloca de um mês pra outro ele puxa errado...
Mas é erro do Access pois rodei a consulta sql lá e deu a mesma coisa...
quando coloca de um mês pra outro ele puxa errado...
Mas é erro do Access pois rodei a consulta sql lá e deu a mesma coisa...
GOSTEI 0