Filtro entre datas

Delphi

01/04/2010

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

Valdecir Peres

Curtidas 0

Respostas

Wilson Junior

Wilson Junior

01/04/2010

Tente colocar

  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

Marcos Iwazaki

01/04/2010

veja se o DataRec não é DateTime... se for faça um trunc 
GOSTEI 0
Valdecir Peres

Valdecir Peres

01/04/2010

É um campo DataTime, mas como faço o trunc   abs. 
GOSTEI 0
Emerson Nascimento

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?
GOSTEI 0
Wilson Junior

Wilson Junior

01/04/2010

A função DateOf faz exatamente o Trunc.
GOSTEI 0
Carlos Bernardo

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

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
POSTAR