Re: Res: Res: [firebase-br] Qual versão escolher? 1.5 ou 2.0 para começar um projeto

Carlos H. Cantu (TeamFB) listas em warmboot.com.br
Ter Ago 28 15:31:08 -03 2007


Era só ler o release notes do Firebird 2 e vc saberia a razão do seu problema. No FB 2, variáveis NEW em triggers AFTER são readonly.

Triggers AFTER são executados depois que os dados foram gravados, portanto não faz sentido vc querer mudar o valor de variáveis NEW ali, pois não teria efeito algum. O FB 2.0 é mais restritivo e reporta erro justamente para evitar código inválido.

[]s
Cantu (Membro do TeamFB - FireBase)
http://www.warmboot.com.br
FireBase - http://www.FireBase.com.br


Reescrevendo a mensagem que mandei a lista:
 
 
Tenho a seguinte estrutura:
 
CREATE TABLE PAGAMENTOCLIENTES (
    ID       DM_ID NOT NULL /* DM_ID = INTEGER */,
    CAIXA    DM_ID NOT NULL /* DM_ID = INTEGER */,
    DATA     DM_DTNASC NOT NULL /* DM_DTNASC = DATE */,
    CLIENTE  DM_ID NOT NULL /* DM_ID = INTEGER */,
    VALOR    DM_VALORES NOT NULL /* DM_VALORES = NUMERIC(15,3) */,
    USUARIO  DM_ID NOT NULL /* DM_ID = INTEGER */
);
 
 
E um trigger para essa tabela:
SET TERM ^ ;
CREATE TRIGGER PAGAMENTOCLIENTES_AIUD0 FOR PAGAMENTOCLIENTES
ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 0
AS
begin
  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;
end
^
SET TERM ; ^
 
 
Então acrescentei um campo com o comando:
 
ALTER TABLE PAGAMENTOCLIENTES 
ADD VALORANTERIOR DM_VALORES;
 
Feito isto, tentei alterar o trigger de forma que ficasse assim:
SET TERM ^ ;
CREATE TRIGGER PAGAMENTOCLIENTES_AIUD0 FOR PAGAMENTOCLIENTES
ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 0
AS
begin
  IF (DELETING OR UPDATING) THEN
    UPDATE CLIENTES SET DEBITO = COALESCE(DEBITO,0) + OLD.VALOR WHERE ID = OLD.CLIENTE;
SELECT DEBITO FROM CLIENTE WHERE ID = NEW.CLIENTE INTO NEW.VALORANTERIOR;
  IF (INSERTING OR UPDATING) THEN
    UPDATE CLIENTES SET DEBITO = COALESCE(DEBITO,0) - NEW.VALOR WHERE ID = NEW.CLIENTE;
end
^
SET TERM ; ^
 
 
Ao tentar compilar aparece a seguinte mensagem de erro:
 
This column cannot be updated because it is derived from an SQL function or expression.
attempted update of read-only column.
 
 
 
E após isso acontecer, mesmo eu dando um rollback, essa tabela fica como ReadOnly. Esse quadro apenas se desfaz, ou seja, a tabela volta a poder ser acessada, apenas quando removo o campo que criei (Valoranterior). Fiz uma pesquisa na Internet pra ver o possível erro, porém o que encontrei foi a informação de que, isso era decorrente da tentativa de alterar um campo calculado (computed by ), o que não é meu caso. O estranho é que já fiz backup e restaurei, passei o GFix, Recriei todo o banco, e o erro persiste. Alguém poderia me ajudar?
 
Uso Firebird 2.0

 
 
 
 
 
Bom, vou tentar instalar o 2.02 pra ver como se comporta. E aliás, eu havia mandado um email pra você informando do erro, inclusive com um link para download do banco e do script de criação do banco (caso quisesse testar criando o banco a partir do zero).
----- Mensagem original ----
De: Carlos H. Cantu (TeamFB) <listas em warmboot.com.br>
Para: FireBase <lista em firebase.com.br>
Enviadas: Terça-feira, 28 de Agosto de 2007 14:03:28
Assunto: Re: Res: [firebase-br] Qual versão escolher? 1.5 ou 2.0 para começar um projeto


1) Que erro? Sem saber a mensagem fica dificil...

2) Depois do FB 2, já saiu o 2.01 e o 2.02

[]s
Cantu (Membro do TeamFB - FireBase)
http://www.warmboot.com.br
FireBase - http://www.FireBase.com.br

mt> Bom, até pouco mais de uma semana atrás, eu não havia tido problemas com o Firebird...
mt> Aliás, com o Firebird 1.5 não me deu problema até hoje, porém, ao
mt> migrar uma aplicação para o 2.0 e tentar
mt> alterar uma trigger.... Não sei o que ocorreu, mas deu um erro
mt> que Ninguém conseguiu resolver. Digo ninguém
mt> pois mandei pra lista e ninguém conseguiu me dar uma resposta que
mt> realmente fosse de encontro a meu problema...
mt> mandei email para várias pessoas que não me responderam... enfim,
mt> voltei para o 1.5 q, até agora, apesar de ter
mt> menos recursos que o 2.0, se apresentou muito mais estável.



______________________________________________
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ê. Saiba mais. 





Mais detalhes sobre a lista de discussão lista