[firebase-br] Componentes Nativos

Magno System magno em speet.com.br
Sex Out 20 14:29:03 -03 2006


Eduardo Jedliczka disse ter tomado sustos em um programa que fez usando zeos. Eduardo gostaria de saber que susto foi esse, o que aconteceu exatamente ? Trabalho com Zeos e gostaria de estar preparado.
Bem, quanto ao Zeos, no início a impressão que se tem é que ele é um componente cheio de falhas e bugs, mas ao tomar certas providências hoje, pelo menos para mim, ele está funcionando 100 %.

1 - Já vi muitas pessoas dizendo que setaram a propriedade autocommit do zconnection para true e as procedures do firebird não commitavam. Pessoal: o autocommit só se aplica quando por exemplo: ZQuery.post / ZQuery.delete. As ZQuery devem estar ligadas ao ZUpdateSql, que é o componente que armazena as rotinas de alteração, deleção e inserção de cada tabela. Então a cada post e delete ele executa a rotina sql pertinente e se o autocommit do zconnection for igual a true ele já comita.

Para procedures faça o seguinte: ZConnection.starttransaction / execproc / ZConnection.commit. Mesmo com o autocommit = true.


2 - Pude perceber que algumas procedures com parâmetros de saída quando executadas 2 vezes seguida (por exemplo, procedure para inserir itens numa venda) a segunda vez retornava erro. Resolução: Armazeno os componentes Zstoredproc dentro de uma datamodule que eu chamo de temporária, aí faço assim

Try
   Criar Datamodule
   Abrir Transação
   Incluir parâmetros de entrada
   Executar a procedure
   Commitar a transação
   Armazenar parâmetros de saida
Finally
   Datamodule.free;
end

Com isso resolvi meu problema.

3 - Quando inserir um registro que contenha campos chaves incrementados por generators, sempre dê um refresh após o post.
Preste atenção. O componente só vai reconhecer o valor incrementado pelo firebird após um refresh. Ex: Insiro o cliente José da Silva e dou um post. A generator dá o valor 1 para o código do cliente. Se eu não der um refresh o componente não enxergará o valor 1. Aí em seguida eu ponho o endereço do josé da silva e dou um post. A principio ele parece que gravou, mas quando abro e fecho o programa conta o codigo 1  o nome José da Silva e o endereço em branco. Motivo: Como no instante em que gravei o endereço o componente ainda não conhecia o codigo do cliente ele deu um UPDATE ENDERECO WHERE CODIGO = NULL ou qualquer coisa similar, logo o firebird não atualizou pois o codigo do josé da silva é 1. Portanto basta um refresh depois da inserção. 

4 - Quando inserir campos chaves dentro da zquery cujos valores são incrementados por generators eles são inseridos com a propriedade required = true. Mude para false, pois senão dará erro quando for inserir um dado, pois você não digitará nenhum valor neste campo (ele será criado pelo firebird).

Bem, fazendo isto ainda não tive problemas com zeos, mas caso alguém já tenha tido favor postar que acho que é do meu e te qualquer um que use ou pense em usar este componente, que na minha opinião se bem trabalhado é simples, muito rápido e eficiente. A versão do zeos que estou usando é 6.5.1 alpha CVS as of 13/10/2005.


Mais detalhes sobre a lista de discussão lista