Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

maquinavirtual

trigger verifica nomerepetido

Recommended Posts

Estou usando firebird 2.0 e ibexpert, delphi 7 e componentes da paleta interbase, porem preciso criar uma trigger para verificar a existencia de nomes repetidos antes do insert no banco de dados. Isso e para evitar que registrem nomes duplicados. Criei este codigo no ibexpert: (esta dando erro no ultimo end)

 

nome da trigger: TRG_REGISREPETIDO
tabela: TABCADASTRO
position: 0 (zero)
is active: marcado (v)
type: before
insert: marcado (v)
update: desmarcado ()
delete: desmarcado ()


as
begin
  if (exists
   (select NOMECOMPLETO from TABCADASTRO
   where NOMECOMPLETO = NEW.NOMECOMPLETO)) then
   exception REGISREPETIDO
end; <----aqui gera uma linha vermelha e nao compila

Peguei este exemplo para me auxiliar:

(Faz o mesmo procedimento que preciso)

 

create exception NOME_CLIENTE_JA_EXISTE
'NOME_CLIENTE_JA_EXISTE';
set term # ;
create trigger INSERT_NOME_CLIENTE for CLIENTES
before insert
as
begin
if (exists
(select NOME_CLIENTE from CLIENTES
where NOME_CLIENTE=NEW.NOME_CLIENTE)) then
exception NOME_CLIENTE_JA_EXISTE;
end #
set term ; #

 

Aqui esta a procedure no delphi que cria a excecao:

procedure TDM.cds_clientesReconcileError(DataSet: TCustomClientDataSet;
E: EReconcileError; UpdateKind: TUpdateKind; var Action: TReconcileAction);
const
ErClienteExiste = 'NOME_CLIENTE_JA_EXISTE';
Mensagem = 'O nome "<b>%s</b>" já existe no banco de dados!';
begin
if pos(ErClienteExiste,E.Message)>0 then
Messagedlg(Format(Mensagem,[cds_clientesNOME_CLIENTE.asstring]),mtinformation,[mbok],0);
(*trate os erros de ForeignKey aqui*)
end;

O que estou errando?

Aguardo resposta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ve a mensagem de erro que ele esta dando e posta tbm, mas pelo que vi deve ser isso aqui:

exception NOME_CLIENTE_JA_EXISTE; <<< deve ser porque aqui tem o ";"

 exception REGISREPETIDO   <<< e aqui nao tem ele :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ve a mensagem de erro que ele esta dando e posta tbm, mas pelo que vi deve ser isso aqui:

exception NOME_CLIENTE_JA_EXISTE; <<< deve ser porque aqui tem o ";"

 exception REGISREPETIDO   <<< e aqui nao tem ele :D

beleza.

Mesmo modificando ocodigo como voce sugeriu gerou o mesmo erro:

nome da trigger: TRG_REGISREPETIDO 
tabela: TABCADASTRO 
position: 0 (zero) 
is active: marcado (v) 
type: before 
insert: marcado (v) 
update: desmarcado () 
delete: desmarcado () 
 
 
as 
begin 
  if (exists 
   (select NOMECOMPLETO from TABCADASTRO 
   where NOMECOMPLETO = NEW.NOMECOMPLETO)) then 
   exception REGISREPETIDO; 
end <---- codigo corrigido: nao recebe virgula.

Porem quando cliquei em Commit gerou este erro:

Invalid Token
Invalid request BLR at offset 72
Exception REGISREPETIDO not defined
Changes will Roled Back...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.