[firebase-br] Componentes Nativos

Eduardo Jedliczka (TeamFB) jedyfb em gmail.com
Sex Out 20 15:22:42 -03 2006


sim, o meu problema foi justamente com o auto-commit e ZUpdateSQL.

às vezes eu fechava o aplicativo e alguns dados não tinham sido gravados.

Ou, no retardo do commit, dava violação de chave. Como estava mantendo o 
projeto entre DELPHI 6 e LAZARUS, eu estava usando uma versão SVN (mais 
nova) do ZEOS.

Pois era impossível usar a versão do SourceForge com o LAZARUS.

======================
Eduardo Jedliczka
Membro do TeamFB - FireBase
Apucarana - PR
======================
"Posso não concordar com nada do que dizes.
Mas defenderei até a morte o seu direito de dizê-lo"
(Voltaire 1694-1778)
----- Original Message ----- 
From: "Magno System" <magno em speet.com.br>
To: "FireBase" <lista em firebase.com.br>
Sent: Friday, October 20, 2006 2:29 PM
Subject: [firebase-br] Componentes Nativos


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.
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço 
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa 





Mais detalhes sobre a lista de discussão lista