Fonte: www.activedelphi.com.br
Nessa dica, vou expor uma situação comum para nós desenvolvedores, que pode ser resolvida de várias formas, (como tudo em programação), mas sempre existe a forma correta ou a que vai garantir a integridade do sistema, e ainda, ser resolvida em pouquíssimo tempo.
Imaginem a seguinte situação, uma empresa possui uma entidade chamada TitulosPagar, nessa entidade estão gravados os titulos a pagar com as suas respectivas datas de vencimento. Nessa mesma entidade temos um campo chamado Prorrogado, que é preenchido quando o fornecedor concede uma prorrogação no título para que o mesmo seja pago após a data de vencimento sem juros etc.
Vocês ja devem ter imaginado que o sistema em questão possui um relatório de Titulos a Pagar em um determinado período. Certo?
Nesse caso o mesmo poderia usar o um Sql simples como o abaixo:
Select titulo, valor, vencimento
From titulosPagar
Where dataVcto between :dataIni and :dataFim
Tranquilo né. O Sql retorna todos os títulos a pagar com vencimento no período passado nos parâmetros dataIni e dataFim.
Vamos complicar, um belo dia o cliente liga para você pedindo para que nesse mesmo relatório de titulos a pagar considerasse a data de prorrogação também, ou seja deve ser listado todos os títulos analisando a data de vencimento, e também a data de prorrogação.
Saída rápida, fazer duas querys, com dois Sql diferentes, um analisando o período pela data de vencimento e o outro analisando pela data de prorrogação, depois gravar tudo em um ClientDataSet e ligar o Client ao relatório. Beleza? Funciona com certeza, mas da um trabalhão, sem falar no tempo de processamento, dependendo o tamanho da entidade de TitulosPagar o processo será demorado.
Solução:
Criar o seguinte comando SQL.
Select titulo, valor, vencimento
From titulosPagar
Where Coalesce(Prorrogado, dataVcto) between :dataIni and :dataFim
Bingo! Temos uma query apenas, um processamento, e a solução com certeza não demorou mais que 1 minuto para alterar a query.
Nenhum comentário:
Postar um comentário