Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Erro com Application Events


alemoraes

Pergunta

Coloquei um componente Application Events para tratar um erro de violação de chave estrangeira,

mas apesar da mensagem aparecer e dar um OK o código é executado mesmo assim:

segue o código no Application Events:

procedure TfrmPatrimonio.ApplicationEvents1Exception(Sender: TObject;

  E: Exception);

begin

  if pos('violation of FOREIGN KEY constraint "FK_LOCALIZACAO_ITENS_PATRIMONIO" on table "LOCALIZACAO_ITENS"',e.Message) > 0 then

  begin

   Showmessage('ERRO: Este Patrimônio encontra-se em USO!. Exclua-o no Cadastro de Localização primeiro!');

   Exit;

  end;

end;

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

mas apesar da mensagem aparecer e dar um OK o código é executado mesmo assim:

isso ocorre porque, quando o evento é acionado e a mensagem é mostrada, existe um comando de saida ( Exit ) do evento.

ao sair desse evento, o cursor retorna para quem fez a chamada e continua a partir dali

uma das opções é voce criar uma variavel ( publica ) de controle nesse evento e testar essa variavel no retorno dela, e a partir disso cancelar o restante do processamento.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Jhonas boa tarde

peço sua ajuda não consegui resolver. Criei uma variável global tipo boolean

o registro continua sendo executado. Veja como eu fiz

procedure TfrmPatrimonio.ApplicationEvents1Exception(Sender: TObject;

  E: Exception);

begin

   if vRetorno = true then

   begin

    if pos('violation of FOREIGN KEY constraint',e.Message) <> 0 then

  begin

          Showmessage('ERRO: Este Patrimônio encontra-se em USO!. Exclua-o no Cadastro de Localização primeiro!');

   end;

  Abort;

   end;

end;

 

Link para o comentário
Compartilhar em outros sites

  • 0

exemplo:

voce poderia usar um bloco try..except em cada procedimento do 
sistema, mas usando o componente ApplicationEvents voce pode 
criar um único procedimento que fará o tratamento de todas as 
exceções que possam ser gerados pelo sistema.    


procedure TFrmPrincipal.ApplicationEvents1Exception(Sender: TObject; E: Exception);
    begin
      if pos('foreign key', E.Message) <> 0 then
         begin 
           ShowMessage('Erro de Chave Estrangeira');
           Halt(0);//finaliza o programa
           /// ou ... aqui voce pode colocar uma rotina para 
           /// Cancelar a edição do registro da tabela 
         end
      else
      if pos('Access violation', E.Message) <> 0 then
          ShowMessage('Erro ao acessar um Objeto')
      else
        begin
           ShowMessage('Erro não tratado ' +#13+E.Message );
           {caso seja uma exceção desconhecida, a linha de código 
            abaixo ira recriar exceção sem fazer tratamento algum}
           raise Exception.Create(E.Message);
        end; 
    end;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Jhonas, obrigado pela ajuda.

Apesar dos testes, ainda sim continua a execução do código mesmo tratando com a exception.  Os seus exemplos

estão perfeitos. Pode ter dado algum Bug no Delphi, não sei dizer.

O que eu fiz foi alterar no banco de dados Firebird, ou seja, primeiro deletei todos os registros envolvendo as

duas tabelas master / detail , depois fui na tabela Filha e alterei na FK_LOCALIZACAO_ITENS_PATRIMONIO

para On Delete Cascade. Está funcionando nesta questão do foreign key.  Resolvido.

 

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...