Res: RES: RES: [firebase-br] Problema Com Alteração / Criação de Trigger
marcos thomaz
marcosthomazs em yahoo.com.br
Seg Ago 20 12:11:56 -03 2007
Ivan, minha procedure está assim:
IF (DELETING OR UPDATING) THEN
UPDATE CLIENTES SET DEBITO = COALESCE(DEBITO,0) + OLD.VALOR WHERE ID = OLD.CLIENTE;
IF (INSERTING OR UPDATING) THEN
UPDATE CLIENTES SET DEBITO = COALESCE(DEBITO,0) - NEW.VALOR WHERE ID = NEW.CLIENTE;
Se você for olhar, a parte do DELETE não está usando NEW. E outra, a tabela fica como readonly, tipo, não consigo, alterar, inserir ou excluir nada. Esse é o mais estranho. E o erro que aparece, não descreve nada praticamente, pois é um erro que aparece ao tentar alterar uma coluna calculada (computed by), que não é meu caso. Já estou ficando intrigado com isso, pois uso o Firebird em muitos de meus projetos, e alguns deles muito complicados, e essa é a primeira vez que tenho problemas com o banco. Agradeço a você por estar me ajudando... se precisar de ajuda, fico a disposição.
----- Mensagem original ----
De: Ivan Guimarães Meirelles <igmeirelles em gmail.com>
Para: FireBase <lista em firebase.com.br>
Enviadas: Segunda-feira, 20 de Agosto de 2007 6:05:22
Assunto: RES: RES: [firebase-br] Problema Com Alteração / Criação de Trigger
Olá Marcos...
Olhando novamente sua lógica... "acho" que o problema deve ocorrer quando vc
executa um delete na tabela PAGAMENTOCLIENTES, pois vc utiliza um select q
tenta fazer alteração no campo NEW.VALORANTERIOR, porém se vc está excluindo
esse campo não poderá ser alterado... vc não tem acesso ao New (novo) valor
desse campo, porque se trata de uma exclusão. Não existe NEW em exclusão.
Bem coloquei "acho" entre aspas porque não testei... apenas analisei a
lógica, faça um teste com um IF separado para o delete sem o select...
Veja se dá certo assim:
CREATE TRIGGER PAGAMENTOCLIENTES_AIUD0 FOR PAGAMENTOCLIENTES
ACTIVE BEFORE INSERT OR UPDATE OR DELETE POSITION 0 AS
Begin
IF (DELETING) THEN
UPDATE CLIENTES SET DEBITO = COALESCE(DEBITO,0) + OLD.VALOR
WHERE ID = OLD.CLIENTE;
ELSE IF (UPDATING) THEN
BEGIN
UPDATE CLIENTES SET DEBITO = COALESCE(DEBITO,0) +
OLD.VALOR WHERE ID = OLD.CLIENTE;
SELECT DEBITO FROM CLIENTE WHERE ID = NEW.CLIENTE
INTO NEW.VALORANTERIOR;
END;
ELSE IF (INSERTING) THEN
UPDATE CLIENTES SET DEBITO = COALESCE(DEBITO,0) - NEW.VALOR
WHERE ID = NEW.CLIENTE;
End
----------------------------------------------------------------------------
-----
Um abraço.
Ivan Guimarães Meirelles
Três Lagoas/MS - igmeirelles em gmail.com
______________________________________________
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
Flickr agora em português. Você clica, todo mundo vê.
http://www.flickr.com.br/
Mais detalhes sobre a lista de discussão lista