ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Disparar trigger NO ACTION? ***Concluído***

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Sáb Fev 12, 2011 11:15 am    Assunto: Disparar trigger NO ACTION? ***Concluído*** Responder com Citação

Pessoal, como faço para gerar uma mensagem para o usuario quando ele esta tentando apagar uma tabela que contem movimentações entre suas referencias Pai/Filho. (Banco de dados Firebird)

Ou seja deixei como NO ACTION na tabela filho FK --- PK então ai não executa nenhuma ação.

Mais como mostrar pa ra o usuario uma mensagem que o filho não pode ser orfão ?

Obs: Isso direto no banco, não é no delphi, quero gerar o exception no FIREBIRD

Algo meio parecido com que estou querendo fazer, para disparar num TRIGGER

Código:
CREATE OR ALTER TRIGGER EXEPT_CLIENTE_REF FOR CLIENTES
ACTIVE BEFORE DELETE POSITION 0
AS
begin
  if
   (
    Exists
          (
           SELECT c.nomeclie
           FROM clientes C, ordemserv O
           )
   )
  then
    Exception RESTRICAO 'Atenção! Exite movimentação para este Cliente.';
end


Mais desta forma ai não esta disparando o exception Sad

Obrigado.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree


Editado pela última vez por adriano_servitec em Seg Fev 14, 2011 11:32 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Sáb Fev 12, 2011 5:15 pm    Assunto: Responder com Citação

Pessoal, o que eu quero fazer é algo semelhante ao que fazemos no delphi

No delphi eu trataria assim

Código:
 {verifica se existe referencia nas tabelas antes de exetudar o delete}
      with qrylocal do
      begin
         close;
         SQL.Clear;
         SQL.Text := ' SELECT c.idclientes '+
           ' FROM clientes C '+
           ' INNER JOIN ordemserv O ON(c.idclientes = o.idclientes) '+
           ' WHERE c.idclientes = :codigo ';
         ParamByName('codigo').AsInteger := StrToInt(edtgen.Text);
         Open;
         if not IsEmpty then
         begin
           Pt_MessageDlg('Atenção! Exite movimentação para este Cliente.', mtError, [mbok],0);
           Exit;
         end;
      end;


Ja diretamente no banco de dados Firebird é que não estou conseguindo
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Seg Fev 14, 2011 10:35 am    Assunto: Responder com Citação

Experimente desta forma:

Código:
CREATE OR ALTER TRIGGER EXEPT_CLIENTE_REF FOR CLIENTES
ACTIVE BEFORE DELETE POSITION 0
AS
begin
  if
   (
    Exists
          (
           SELECT first 1 idclientes
           FROM ordemserv
           WHERE (idclientes = old.idclientes)
           )
   )
  then
    Exception RESTRICAO 'Atenção! Exite movimentação para este Cliente.';
end


obs: old.idclientes ---> valor da coluna idclientes da linha a ser excluida da tabela CLIENTES

Espero que ajude.

_________________
Assinatura: http://www.imoveisemexposicao.com.br/imobiliarias-em-suzano


Editado pela última vez por imex em Seg Mai 28, 2012 5:49 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Seg Fev 14, 2011 11:31 pm    Assunto: Responder com Citação

imex escreveu:
Experimente desta forma:

Código:
CREATE OR ALTER TRIGGER EXEPT_CLIENTE_REF FOR CLIENTES
ACTIVE BEFORE DELETE POSITION 0
AS
begin
  if
   (
    Exists
          (
           SELECT first 1 idclientes
           FROM ordemserv
           WHERE (idclientes = old.idclientes)
           )
   )
  then
    Exception RESTRICAO 'Atenção! Exite movimentação para este Cliente.';
end


obs: old.idclientes ---> valor da coluna idclientes da linha a ser excluida da tabela CLIENTES

Espero que ajude.

_________________
Assinatura: Imobiliárias em Suzano
Muitossimo obrigado amigo... Valeu pela ajuda.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB