sexta-feira, 24 de setembro de 2010

Perdendo um pouco de tempo

Não sei se você compartilha do mesmo sentimento,  talvez já tenha observado que programar computadores de vez em quando não faz muito sentido.  Se perde muito tempo e no final das contas, sempre devido a alguma coisa muito estupida, que por alguma razão, claro que inexplicada, sempre acontece.  O engraçado é que quando a coisa 'flui' o sentimento é oposto, mas quando 'enrosca' dá vontade de mudar de profissão.

Esse post, foi meio dificil de escrever porque apesar da situação ser real, ou seja aconteceu, é tão inusitada que talvez você nunca a veja.  Ou mesmo, caso tenha passado por isso, deve ter desistido logo e passado para outra abordagem, e de certa forma desviado do problema.

O fato é que programando uma interface Web que chamava uma janela com &window.open(), de vez em quando, a tal não abria.  E isso acontecia apenas para um determinado registro apenas. Ou seja, não existia erro de programação porque para todos os demais registros da base a tal janela abria, somente para este não.  Não havia mensagem de erro, não havia depuração que pudesse identificar o problema, porque o fluxo de programa seguia normalmente em qualquer situação.

O que fazer nessa situação?

1. (  ) Destruir o computador com uma marreta de 3kg, e em seguida estourar o cartão de crétido para comprar um novo
2. (  ) Sair para tomar um sorvete e só voltar no mês seguinte
3. (  ) Ficar algumas horas colocando linhas de mensagens do tipo, 'passei por aqui', para tentar identificar a razão, e no final das contas não chegar a conclusão nenhuma.

Por obra do acaso, ao olhar a interface observei que havia uma variável, claro que não tinha nada a ver com a tal chamada (da interface com &window), que apresentava na interface um inocente valor -1, somente nessa situação.


Claro que coisa tão insignificante pode ser corrigida posteriormente, programador que se preze não perde tempo com besteiras... pois não precisamos interromper nosso raciocínio para corrigir algo tão estúpido, mesmo porque não podemos perder tempo.  E para piorar temos uma situação tão estranha que prioritariamente deve ser resolvida primeiro.

Enfim, resumindo, era isso e ao trocar -1 por zero na base de dados, o ceu passou a ser azul novamente.

Conclusão: gosto sempre de finalizar os posts com alguma mensagem otimista, e dessa vez a única que me vem a cabeça é: QUE ESTÚPIDEZ!

terça-feira, 21 de setembro de 2010

IN

Esse operador é uma daquelas boas invenções que o homem realizou até hoje, tal como a vacina contra gripe, o automóvel, a batatinha chips, a coca-cola, rs.... tirando os exageros, ele é legal mesmo, talvez você não tenha sido apresentado ainda, mas com certeza passará a observá-lo de forma melhor.

Seu objetivo é proporcionar a pesquisa ou acesso a uma coleção de dados, e está normalmente associado a um comando de repetição do tipo for ou for ... each. Meu objetivo aqui não é explicar muito a respeito de coleções, mas entenda o seguinte de forma simplificada, que consiste de uma variável do tipo conjunto de dados, algo similar aos vetores e matrizes, mas sem os limites de quantidades impostas por esses tipos.

Então considerando uma coleção qualquer, de nomes (imagem abaixo), poderíamos utilizar o operador IN para localizar qualquer um dos nomes da coleção em uma tabela de clientes, por exemplo.




Para isso precisaríamos programar algo bem simples como:








Para entender esse operador é simples, basta entender que a informação a ser localizada em (na) coleção localizada à esquerda.  Portanto ClienteNome será localizado (ou não) na &colecao e se isso ocorrer, o seu numero será apresentado.  A variavel  &colecao deve ser do tipo Char(20) marcada como collection. (revisado!)


Existem várias aplicações para isso, mostramos aqui como localizar conjuntos de dados de uma única vez utilizando uma variável coleção, mas é claro que você pode utilizá-lo para ligar, através de pesquisas, duas tabelas distintas desde que tenham alguma coisa em comum, e isso não quer dizer que tenham relacionamentos diretos ou indiretos.  Explicando um pouco melhor isso, um objeto Data Selector pode ser programado para realizar uma determinada consulta a uma tabela, e através do operador IN utilizar o resultado desta pesquisa para filtrar registros no for...each.



Mas isso é assunto para outra ocasião.