Filtro entre datas
Alguém poderia me ajudar com este código:
TClientDataSet(Ds.DataSet).Close;
TClientDataSet(Ds.DataSet).CommandText := ('SELECT * FROM cadcontrrecebmaterial WHERE DataRec>=:DTPinicio and DataRec<=:DTPfinal order BY DataRec');
TClientDataSet(Ds.DataSet).Params.ParamByName('DTPinicio').AsDate :=DTPinicio.Date;
TClientDataSet(Ds.DataSet).Params.ParamByName('DTPfinal').AsDate :=DTPfinal.Date;
TClientDataSet(Ds.DataSet).Open;
O caso é o seguinte, tenho diversos registros na tabela, porém ao filtrar as datas estou recebendo o grid vazio.
Exemplo:
Filtrar o período do dia 22/02/2010 a 22/02/2010 – o código não filtra nada.
Filtrar o período do dia 22/02/2010 a 23/02/2010 – o código filtra só o dia 22/02/2010.
Filtrar o período do dia 22/02/2010 a 24/02/2010 – o código filtra do dia 22 a 23/02/2010.
Puxa no primeiro filtro não deveria trazer o dia 22/02/2010 e no segundo o dia 22 e 23
Abraço
Valdecir
Valdecir Peres
Curtidas 0
Respostas
Wilson Junior
01/04/2010
Tente colocar
declare DateUtils no uses.
Espero ter colaborado.
TClientDataSet(Ds.DataSet).Params.ParamByName('DTPinicio').AsDate
:= DateOf( DTPinicio.Date );
TClientDataSet(Ds.DataSet).Params.ParamByName('DTPfinal').AsDate := DateOf( DTPfinal.Date );declare DateUtils no uses.
Espero ter colaborado.
GOSTEI 0
Marcos Iwazaki
01/04/2010
veja se o DataRec não é DateTime... se for faça um trunc
GOSTEI 0
Valdecir Peres
01/04/2010
É um campo DataTime, mas como faço o trunc
abs.
GOSTEI 0
Emerson Nascimento
01/04/2010
você pode também setar a propriedade Time do objeto DTPInicio pra 00:00:00 e do objeto DTPFinal para 23:59:59
e passar o parâmetro como .AsSQLTimeStamp, usando DTPInicio.DateTime e DTPFinal.DateTime.
mas creio que a melhor opção seja mesmo truncar o campo, assim você se preocupa somente em passar a data, sem necessidade de atentar-se à hora.
IMPORTANTE: qual o banco de dados em uso?
e passar o parâmetro como .AsSQLTimeStamp, usando DTPInicio.DateTime e DTPFinal.DateTime.
mas creio que a melhor opção seja mesmo truncar o campo, assim você se preocupa somente em passar a data, sem necessidade de atentar-se à hora.
IMPORTANTE: qual o banco de dados em uso?
GOSTEI 0
Wilson Junior
01/04/2010
A função DateOf faz exatamente o Trunc.
GOSTEI 0
Carlos Bernardo
01/04/2010
'SELECT * FROM cadcontrrecebmaterial WHERE DataRec>=:DTPinicio and DataRec<=:DTPfinal order BY DataRec');
Tenta o between
'SELECT * FROM cadcontrrecebmaterial WHERE DataRec BETWEEN :DTPinicio and :DTPfinal order BY DataRec'
GOSTEI 0
Valdecir Peres
01/04/2010
Pessoal valeu a atenção.
Optei por dar entrada só com a data, fica mais fácil.
abs
GOSTEI 0