[firebase-br] Criando Trigger

Mario Rodrigues marioirodrigues em gmail.com
Qui Jun 26 17:41:01 -03 2008


Gustavo,

Seguinte...o tipo é uma varchar de 15. Disponivel, tem tamanho 10.
Dai o q eu fiz mudei o tipo de dados para BIGINT, e continuou a dar o erro.
E sobre a linha 21..veja vc mesmo é um END...do ultimo BEGIN
---
CREATE TRIGGER "TR-ATUALIZA_STATUS" FOR TBL_EMPRESTIMO
ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 0
AS
begin
  IF (INSERTING) THEN
    UPDATE tbl_cd
    SET tbl_cd.status = 'Emprestado'
    WHERE tbl_cd.id_cd = 'Disponivel';
  ELSE
  IF (DELETING) THEN
    UPDATE tbl_cd
    SET tbl_cd.status = 'Disponivel'
    WHERE tbl_cd.status = 'Emprestado';
  ELSE
 IF (UPDATING) THEN BEGIN
    UPDATE tbl_cd
    SET tbl_cd.status = 'Disponivel'
    WHERE
   tbl_cd.status = 'Emprestado';
END
end

Tens mais alguma ideia?


2008/6/26 Gustavo Moda <gustavo.moda em gmail.com>:

> Eita... Overflow.. Eu fico p** com ele.. heheh
>
> Olha so.
> Isso ocorre quando:
> 1) O campo ou variavel esta com um tamanho e vc esta tentando setar
> com outro tamanho.
> Ex:
>     campo_variavel varchar(2);
>     campo_variabel = 'Aqui dá o overflow'
> 2) Você excedeu os limite do tipo de dado. Decimal, smallint,
> integer,bigint *(esse vai ser dificil exceder) :D
> Veja no manual do firebird quais sao
>
> 3) Você fez uma divisao por zero.
>
> Entao, vai na linha 21 e verifica a instrucao que esta dando erro, e
> confira os tipos de dados.
>
> Abracos
>
>
> 2008/6/26 Mario Rodrigues <marioirodrigues em gmail.com>:
> > Fale Gustavo,
> >
> > Cara consegui criar bacana...porem quando tento lancar um emprestimo deu
> o
> > seguinte erro:
> > Error Message:
> > ----------------------------------------
> > Overflow occurred during data type conversion.
> > conversion error from string "Disponivel".
> > At trigger '"TR-ATUALIZA_STATUS"' line: 21, col: 1.
> >
> > O tipo de dados do campo status é string...qual o problema?
> >
> > 2008/6/26 Gustavo Moda <gustavo.moda em gmail.com>:
> >
> >> ja existe essa trigger,
> >> use o create or alter trigger
> >>
> >> Sugestão: De nomes na trigger usando sulfixo e o nome da tabela
> >> Ex
> >> "TR_TBL_EMPRESTIMO-IUD_A0"
> >>
> >> p.s. A aspa dupla é necessário pq usei o caractere -
> >>
> >> Abraço
> >>
> >>
> >>
> >> CREATE TRIGGER ATUALIZA_status FOR tbl_emprestimo
> >> ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 0
> >> AS
> >> begin
> >>  IF (INSERTING) THEN
> >>    UPDATE tbl_cd
> >>    SET tbl_cd.status = 'Emprestado'
> >>    WHERE tbl_cd.id_cd = 'Disponivel';
> >>  ELSE
> >>  IF (DELETING) THEN
> >>    UPDATE tbl_cd
> >>    SET tbl_cd.status = 'Disponivel'
> >>    WHERE tbl_cd.status = 'Emprestado';
> >>  ELSE
> >> IF (UPDATING) THEN BEGIN
> >>    UPDATE tbl_cd
> >>    SET tbl_cd.status = 'Disponivel'
> >>    WHERE
> >>     tbl_cd.status = 'Emprestado';
> >>  END
> >> end
> >>
> >> 2008/6/26 Mario Rodrigues <marioirodrigues em gmail.com>:
> >> > Salve a todos,
> >> >
> >> > To iniciando no mundo da programacao...dai o seguinte...to tentando
> criar
> >> > uma trigger q faça o seguinte...tenho um sistema de emprestimo de
> >> > cd...tbl_cd com id_cd, descricao e status(bem resumido)..tenho a
> >> > tbl_emprestimo onde é relacionada com o cd...blz...a trigger tem q
> fazer
> >> o
> >> > seguinte quando eu gravar o emprestimo a trigger muda o status do cd
> para
> >> > 'Emprestado'...dai fiz a seguinte trigger:
> >> > CREATE TRIGGER ATUALIZA_status FOR tbl_emprestimo
> >> > ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 0
> >> > AS
> >> > begin
> >> >  IF (INSERTING) THEN
> >> >     UPDATE tbl_cd
> >> >     SET tbl_cd.status = 'Emprestado'
> >> >     WHERE tbl_cd.id_cd = 'Disponivel';
> >> >  ELSE
> >> >  IF (DELETING) THEN
> >> >     UPDATE tbl_cd
> >> >     SET tbl_cd.status = 'Disponivel'
> >> >     WHERE tbl_cd.status = 'Emprestado';
> >> >  ELSE
> >> > IF (UPDATING) THEN BEGIN
> >> >     UPDATE tbl_cd
> >> >     SET tbl_cd.status = 'Disponivel'
> >> >     WHERE
> >> >      tbl_cd.status = 'Emprestado';
> >> >   END
> >> > end
> >> >
> >> > Porem esta dando erro no momento da criação da trigger...esse
> erro:(uso o
> >> FB
> >> > 2.0  e o IBExpert)
> >> >
> >> > This operation is not defined for system tables.
> >> > unsuccessful metadata update.
> >> > DEFINE TRIGGER failed.
> >> > lock conflict on no wait transaction.
> >> > attempt to store duplicate value (visible to active transactions) in
> >> unique
> >> > index "RDB$INDEX_8".
> >> >
> >> > Alguem poderia me ajudar?
> >> > ______________________________________________
> >> > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> >> > Para saber como gerenciar/excluir seu cadastro na lista, use:
> >> http://www.firebase.com.br/fb/artigo.php?id=1107
> >> > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >> >
> >>
> >> ______________________________________________
> >> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> >> Para saber como gerenciar/excluir seu cadastro na lista, use:
> >> http://www.firebase.com.br/fb/artigo.php?id=1107
> >> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >>
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



Mais detalhes sobre a lista de discussão lista