[firebase-br] ??? Criar uma trigger para Generetor ???

Gianclaudio Oliveira gianclaudiooliveira em yahoo.com.br
Dom Dez 3 17:03:45 -03 2006


Carlos,

O lance é o seguinte: o que acontece é que a sua aplicação não está dando um "refresh" após as inserções. Quando você atribui um código a um campo utilizando esta trigger, a sua aplicação não sabe qual é o código atribuido porque isso foi feito dentro do Firebird. Por isso ele fica em branco e dá erro em outra inserção. Pra solucionar isso, eu faço o seguinte: toda vez que eu edito, excluo o insiro um novo registro, faço um refresh, ou seja, a re-leitura dos registros, inclusive do recém inserido. Logo, ele vai aparecer com o código atribuído.
Se, por qualquer motivo do mundo que seja, este tipo de solução não for apropriada pra você, a solução proposta pelo Kleber também resolveria. O que você deve fazer é dar um select tipo: "select gen_id (SEU_GENERATOR, 1) from RDB$DATABASE".
Este select deve ser feito em um query separado. Assim, você obteria o valor do próximo código e poderia atribuir manualmente ao campo código da sua tabela.
Não se preocupe pois mesmo usando o "gen_id" em um select, o código seria auto-incrementado da mesma forma que acontece se usá-lo dentro da TRIGGER. Ou seja, não haveria repetição de códigos.

Esta segunda alternativa é muito boa quando você está trabalhando em cima de registros de um select de recuperação muito demorada. Se usar o método que eu uso normalmente, quando fosse dar o refresh, isso iria ser um pouco desagradável aos olhos dos usuários, ter que esperar alguns segundos para ter as alterações confirmadas. Usando o alternativa citada pelo Kleber, que eu uso em alguns casos, isso não aconteceria porque não haveria re-leitura dos registros.
Por outro lado, dependendo da tabela em questão (freqüência e quantidade de registros, finalidade da tabela etc...), pode ser necessário fazer o refresh a cada alteração para se atualizar quanto a alterações (edições, inserções e exclusões) feitas por outros usuários na rede.

Enfim, é melhor analisar pra ver qual é a que melhor se encaixa no seu caso.

Há um tempo atrás eu li em algum lugar, acho até que foi aqui na lista, que no FB 2 existe uma espécie de cláusula RETURNING que retornaria o código usado no registro na mesma operação da inserção, sem ter que fazer um select separado. Pode ser que eu esteja falando besteira, mas acho que foi algo assim que eu li. Mas não posso falar sobre isso com certeza pq ainda estou totalmente por fora do FB 2. Talvez outro companheiro da lista possa esclarecer sobre isso.

Boa sorte



Grande abraço :)
Gianclaudio Oliveira
Analista e Desenvolvedor de Sistemas
------------------------------------
"Existem 10 tipos de pessoas no mundo: as que lêem binário e as que não lêem."
 		
---------------------------------
 Novidade no Yahoo! Mail: receba alertas de novas mensagens no seu celular. Registre seu aparelho agora!


Mais detalhes sobre a lista de discussão lista