[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