sexta-feira, 1 de fevereiro de 2013

Firebird: Comparando campos DateTime sem ignorar as Horas através de SQLTimeStamp no Delphi 7


Uma dica para os desenvolvedores, que assim como eu, também já tiveram essa grande dificuldade pela frente.

Eu possuo uma coluna do tipo Date no banco de dados e a aplicação alimenta-a com Data e Hora. O problema surge quando preciso num relatório filtrar os lançamentos num determinado período, e ao gerar no relatório vários lançamentos são ignorados, visto que a data deles tem horas diversas.


A solução para isso, utilizando componentes DBExpress, para comparar um intervalo entre duas datas foi a seguinte:

  • 2 componentes TDateTimePicker da paleta Win32 (DTPckInicial e DTPckFinal);
  • adicionar na propriedade Time do DTPckInicial: 00:00:01
  • adicionar na propriedade Time do DTPckFinal23:59:59
  • na bloco USES adicione SqltimSt;
  • utilizar as 3 linhas do código abaixo ao filtrar os lançamentos compreendidos nas datas selecionadas nos dois componentes TDateTimePicker:

Query.SQL.Add(' AND ( CAMPO_TIPO_DATA BETWEEN :DATA_INI AND :DATA_FIM )');
Query.ParamByName('DATA_INI').AsSQLTimeStamp := DateTimeToSQLTimeStamp(DTPckInicial.DateTime);
Query.ParamByName('DATA_FIM').AsSQLTimeStamp := DateTimeToSQLTimeStamp(DTPckFinal.DateTime);

Conclusões

Notamos neste artigo a facilidade em se manipular campos DateTime,
inclusive os utilizando como parâmetros sem ignorar as horas,
utilizando a ferramente Delphi 7. Forte abraço e até o próximo tutorial.


--