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 

Tratamento de erro

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
Hemelen
Novato
Novato


Registrado: Segunda-Feira, 8 de Julho de 2013
Mensagens: 34

MensagemEnviada: Seg Dez 02, 2013 3:07 pm    Assunto: Tratamento de erro Responder com Citação

Olá, estou tentando fazer o seguinte tratamento de erro para exclusão de registros com ligação de chave estrangeira, para que não apareça ao usuário o erro do próprio delphi ao tentar excluir um registro presente em outra tabela. Para isso utilizei o ApplicationEvents e o seguinte codigo,mesmo assim não está sendo tratado o erro. O que pode ser feito?

* Obs: utilizo firebird e Ibdataset
Código:
procedure Tfrmcadcliente.ApplicationEvents1Exception(Sender: TObject;
  E: Exception);
var
mensagemerro : String;
P1, P2 : Integer;
begin
if pos(UpperCase('violation of primary or unique key constraint'), UpperCase(e.Message)) > 0 then
Begin
beep;
ShowMessage('O valor digitado para o campo já existe nesta tabela.');
End;
if pos(UpperCase('attempt to store duplicate value'), UpperCase(e.Message)) > 0 then
Begin
beep;
ShowMessage('Já existe cadastrado com este nome');
End;
if pos(UpperCase('violation of foreign key constraint'), UpperCase(e.Message)) > 0 then
Begin
beep;
ShowMessage('Não é possível excluir este Cliente');
End;
if pos(UpperCase('must have a value'), UpperCase(E.Message)) > 0 then
Begin
beep;
P1 := Pos('''', E.Message);
mensagemerro := E.Message;
delete(mensagemerro, P1, 1);
P2 := Pos('''', mensagemerro);
mensagemerro := copy (E.Message, P1 + 1, P2 - P1);
ShowMessage('O campo ['+ mensagemerro + '] é de preenchimento obrigatório.');
End;
end;
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 Dez 02, 2013 4:09 pm    Assunto: Responder com Citação

Boa tarde,

Não sei se vai funcionar, mas tente executar o método CancelDispatch de TApplicationEvents após o tratamento do erro:

Código:
ApplicationEvents1.CancelDispatch;


edit: estava faltando um h no final de CancelDispatch

Espero que ajude.


Editado pela última vez por imex em Ter Mar 21, 2023 4:43 pm, num total de 2 vezes
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Hemelen
Novato
Novato


Registrado: Segunda-Feira, 8 de Julho de 2013
Mensagens: 34

MensagemEnviada: Seg Dez 02, 2013 4:14 pm    Assunto: Responder com Citação

imex escreveu:
Boa tarde,

Não sei se vai funcionar, mas tente executar o método CancelDispatch de TApplicationEvents após o tratamento do erro:

Código:
ApplicationEvents1.CancelDispatc;


Espero que ajude.



É não funciona,sequer cai no tratamento de erro.Já da o erro do delphi direto
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 Dez 02, 2013 4:36 pm    Assunto: Responder com Citação

Você está fazendo o teste pelo Exe ou executando a sua aplicação com debug (F9)?
Se estiver executando com debug, o que acontece se você clicar no botão "Continue" no form em que a mensagem do Delphi é exibida?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Hemelen
Novato
Novato


Registrado: Segunda-Feira, 8 de Julho de 2013
Mensagens: 34

MensagemEnviada: Seg Dez 02, 2013 4:46 pm    Assunto: Responder com Citação

imex escreveu:
Você está fazendo o teste pelo Exe ou executando a sua aplicação com debug (F9)?
Se estiver executando com debug, o que acontece se você clicar no botão "Continue" no form em que a mensagem do Delphi é exibida?



Olha como executavel da o seguinte erro :'violation of FOREIGN KEY constrait. Foreign key references presents for the record


E com debug também da o mesmo erro do delphi primeiro e se eu continuo apertando F9 cai na mensagem if pos(UpperCase('violation of foreign key constraint'), UpperCase(e.Message)) > 0 then
Begin
beep;
ShowMessage('Não é possível excluir este Cliente');
mas isso só depois de aparecer o erro do delphi
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 Dez 02, 2013 5:01 pm    Assunto: Responder com Citação

Você acrescentou o código que sugeri?

Código:
if pos(UpperCase('violation of foreign key constraint'), UpperCase(e.Message)) > 0 then
  Begin
    beep;
    ShowMessage('Não é possível excluir este Cliente');
    ApplicationEvents1.CancelDispatch;
  End;


O Delphi exibe a mensagem por padrão ao executar com debug, mas acho que se você acrescentar o CancelDispatch não será exibida nenhuma mensagem após a sua (ShowMessage), seja com debug ou pelo Exe.

Espero que ajude.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Hemelen
Novato
Novato


Registrado: Segunda-Feira, 8 de Julho de 2013
Mensagens: 34

MensagemEnviada: Seg Dez 02, 2013 5:06 pm    Assunto: Responder com Citação

imex escreveu:
Você acrescentou o código que sugeri?

Código:
if pos(UpperCase('violation of foreign key constraint'), UpperCase(e.Message)) > 0 then
  Begin
    beep;
    ShowMessage('Não é possível excluir este Cliente');
    ApplicationEvents1.CancelDispatch;
  End;


O Delphi exibe a mensagem por padrão ao executar com debug, mas acho que se você acrescentar o CancelDispatch não será exibida nenhuma mensagem após a sua (ShowMessage), seja com debug ou pelo Exe.

Espero que ajude.


No debug ou não , continua mostrando o a mensagem própria do Delphi,mesmo com o código que você passou
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 Dez 02, 2013 5:12 pm    Assunto: Responder com Citação

Confirma uma coisa... a sua mensagem está sendo exibida?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Hemelen
Novato
Novato


Registrado: Segunda-Feira, 8 de Julho de 2013
Mensagens: 34

MensagemEnviada: Seg Dez 02, 2013 5:16 pm    Assunto: Responder com Citação

imex escreveu:
Confirma uma coisa... a sua mensagem está sendo exibida?


Somente em modo debug, porque primeiro aparece o erro do delphi e se continuo apertando f8 o tratamento de erro mostra a mensagem. Do contrário, em modo de execução normal, ao tentar excluir já da erro de cara e para a aplicação
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 Dez 02, 2013 5:33 pm    Assunto: Responder com Citação

Não tenho experiência com o TApplicationEvents, mas não estou entendendo porque com debug a sua mensagem é exibida ao continuar a execução, e pelo Exe não é exibida...
Só pra cofirmar, o título do Form em que o Delphi exibe a mensagem ao executar com debug é "Debugger Exception Notification" ou algo semelhante?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Hemelen
Novato
Novato


Registrado: Segunda-Feira, 8 de Julho de 2013
Mensagens: 34

MensagemEnviada: Seg Dez 02, 2013 5:45 pm    Assunto: Responder com Citação

imex escreveu:
Não tenho experiência com o TApplicationEvents, mas não estou entendendo porque com debug a sua mensagem é exibida ao continuar a execução, e pelo Exe não é exibida...
Só pra cofirmar, o título do Form em que o Delphi exibe a mensagem ao executar com debug é "Debugger Exception Notification" ou algo semelhante?



Sim, a mensagem do próprio delphi, indicando o erro esta escrito exatamente isso e com o erro 'violation of FOREIGN KEY'[/u]
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 Dez 02, 2013 6:42 pm    Assunto: Responder com Citação

Eu na verdade tinha perguntado sobre o título do form / janela onde é exibda a mensagem ao executar com debug... então pergunto novamente:

1) O título do form / janela onde é exibda a mensagem é "Debugger Exception Notification" ou semelhante? Ela possui os botões "Break" e "Continue"?

2) Você disse que a sua mensagem é exibida se você continua a execução. Depois que você fecha o form com a sua mensagem é exibida alguma outra mensagem? Ou o cursor volta para o seu Form?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Hemelen
Novato
Novato


Registrado: Segunda-Feira, 8 de Julho de 2013
Mensagens: 34

MensagemEnviada: Seg Dez 02, 2013 7:43 pm    Assunto: Responder com Citação

imex escreveu:
Eu na verdade tinha perguntado sobre o título do form / janela onde é exibda a mensagem ao executar com debug... então pergunto novamente:

1) O título do form / janela onde é exibda a mensagem é "Debugger Exception Notification" ou semelhante? Ela possui os botões "Break" e "Continue"?

2) Você disse que a sua mensagem é exibida se você continua a execução. Depois que você fecha o form com a sua mensagem é exibida alguma outra mensagem? Ou o cursor volta para o seu Form?



Sim é Debugger Exception Notification" e possui os botões ok e help.

Depois que eu fecho o form com a minha mensagem a aplicação para d rodar, porque neste momento já deu o erro do próprio delphi .. Ai lá em cima fica Project1[STOPPED]
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: Ter Dez 03, 2013 9:23 am    Assunto: Responder com Citação

A janela com o título "Debugger Exception Notification" não é exibida para o usuário.
Quando essa janela for exibida clique em "OK" e depois pressione F9 novamente para continuar a execução.
O que acontecer depois é o que o usuário vai ver. Se o erro for tratado corretamente será exibida a sua mensagem, senão será exiida a mesma mensagem da janela "Debugger Exception Notification", mas agora com o nome do seu projeto no título da janela.

Experimente fazer um novo teste clicando em "OK" e F9 para ver o que acontece exatamente.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
marcocunhasilva
Profissional
Profissional


Registrado: Segunda-Feira, 21 de Agosto de 2006
Mensagens: 740
Localização: Porto Alegre

MensagemEnviada: Ter Dez 03, 2013 12:06 pm    Assunto: Responder com Citação

Olá, Hemelen, tudo bem?

Veja se o seu componente ApplicationEvents encontra-se na unidade principal da aplicação (normalmente é a unidade do formulário principal). Caso sua unidade principal seja a do DataModule, coloque o componente lá e, consequentemente, as mensagens aparecerão. Já tive este problema e resolvi colocando o ApplicationEvents no DataModule, pois ele era a unidade principal do meu sistema.

Espero ter ajudado...

T++
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi 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