Uma situação não prevista: #FAIL
Leonel Fraga de Oliveira 01/08/2009 11:46

É praticamente impossível prever TODAS as situações durante o desenvolvimento de um sistema, seja durante a análise, a programação, o teste e demais etapas do ciclo de vida de um programa.

#FAIL

Estava fazendo um sistema que conversa com um webservice, que eu mesmo desenvolvi, quando me deparo com um resultado um tanto indesejável.

Veja este pequeno trecho de código:

public void atualizaUltimaConsulta(int parametro)
{
	this.executaSQL("update TABELA set DATA_ULT_CONSULTA = current_date, HORA_ULT_CONSULTA = (current_time - 20) where PARAMETRO = " + parametro.ToString(), false);
}

Esta função faz parte de uma rotina de verificação de histórico: o sistema chama o webservice, executa um método que retorna um histórico de alterações e no final confirma o recebimento disparando a rotina atualizaUltimaConsulta, colocando a data e hora atuais no banco de dados, para que a seleção de novos registros de histórico a serem enviados em uma próxima requisição seja sempre os após a última consulta.

Atualizo o banco de dados com um tempo de 20 segundos antes, para que novos registros inseridos durante o processamento sejam incluídos na próxima “rodada” de verificação de histórico.

Até aí nada demais, algo (quase) perfeitamente normal.

Só que…

Era por volta da meia-noite quando fiz o teste desta rotina, e nas execuções posteriores nenhum registro era retornado, embora satisfazessem as condições para que eles sejam retornados.

Po##a, tem registro na tabela e por que nao retorna? É o c@r@lh0 de asa fumegante e voador!

Resolvi checar a tabela onde é gravada a data/hora da última consulta e eis o que eu vejo: A data ele atualizou certinho, como eu executei a rotina de confirmação de consulta depois da meia-noite, ele gravou o dia atual. Porém, no campo de hora, o maledeto me gravou 23:59, por causa da diferença de 20 segundos que retirei da hora atual, ou seja, estes registros só iriam aparecer no dia seguinte :-(

Resumindo: uma #fail de dimensionamento de tipo de dado, pois se ele fosse timestamp ao invés de campos separados isso não teria acontecido…

Mas, em produção, isso nunca aconteceu hehe.

Um abraço!

Leonel Fraga de Oliveira Leonel Fraga de Oliveira é formado em Processamento de Dados na Faculdade de Tecnologia de São Paulo (FATEC-SP - 2002) e anteriormente em Técnico em Eletrônica, pela ETE Professor Aprígio Gonzaga (lá em 1999).
Atualmente trabalha como Analista de Sistemas na Prefeitura Municipal de São Caetano do Sul - SP
Tem como hobbies DJing (também trabalha como DJ freelancer) e ciclismo, além da manutenção dos sites NeoMatrix Light e NeoMatrix Tech.
Gosta de música eletrônica, tecnologia, cinema (super fã de Jornada nas Estrelas), gastronomia e outras coisas mais.


Compartilhe nas redes sociais

   

Deixe seu comentário

comments powered by Disqus