Nao abortar o sistema após um erro

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Nao abortar o sistema após um erro

Mensagem por janio »

Colegas,

Estou precisando montar uma rotina para quando ocorrer algum erro fatal em tempo de execução, o sistema não aborte, simplesmente retorne ao menu.

No NG até tem um exemplo que funciona. Quando há algum erro ele retorna ao menu sem sair do sistema. O problema é que ele não está mostrando qual foi o erro e nem criando o ERROR.LOG, que acho extremamente importante.

Alguma sugestão??? Segue o exemplo do NG.

Código: Selecionar todos

Local bErrorHandler, bLastHandler, objErr
bErrorHandler := { |objError| MyErrorHandler(objError) }

bLastHandler := ErrorBlock( bErrorHandler )

Do While .t.

   Begin Sequence

      ****
      MENU
      ****

   Recover Using objErrorInfo

      // ErrorSys()  // se chamar aqui o errorsys ele aborta
      Alert("ERRO NO SISTEMA. AVISO AO ADMINISTRADOR")
      Loop

   EndSequence

   ErrorBlock( bLastHandler )

Return

Func MyErrorHandler( objError )

   Break objError

Return nil
Jânio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

Oi Jânio,

Alguns erros não são passíveis de tratamento e sempre abortarão a execução do programa.

O que se pode fazer é alterar o errorsys, pois é ele quem manda finalizar o programa, inclusive exibindo o clássico alert vermelho "Quit" ou "Retry". Note que o erros "intratáveis" sempre são mostrados somente com "Quit", e outras vezes nem sequer o alert é exibido, de acordo com a gravidade da situação.

No Clipper, eu tenho um tratamento completo do errorsys, já no xHarbour somente alterei em conjunto com a MiniGUI, como já mencionei no outro tópico.
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem por janio »

Olá Stanis,

Mesmo os "erros não passíveis de tratamento", gostaria que o sistema não fosse abortado.

Exemplo: Uma exibição de uma variável que não existe, o sistema retorna ao menu e pronto!

Outro problema que tenho enfrentado é de perca da rede, mas logo em seguida, 4 ou 5 segundos depois, a rede volta novamente. Mas aí já apareceu o quit e tal...

Nesse caso, se o sistema não fosse abortado, o usuário após esse ínterim continua seu trabalho.

A mensagem do alert causa um certo espanto ao usuário, na minha opinião, dando a impressão de que o sistema foi mal projetado, quando muitas vezes esses erros são alheios ao sistema.

Jânio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Mensagem por vagucs »

Janio,

Tem erros que realmente nao tem como contornar, só se vc chamar o procedure main do seu sistema de novo voltando tudo ao inicio, o que não é legal.


Um sistema bem projetado nao pode apresentar erros tão facilmente, quanto a rede se perder, ai já não é problema do seu sistema, é algo que tem que ser corrigido urgentemente.
Sem mais
Wagner Nunes
www.vagucs.com.br
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem por janio »

vagucs escreveu:Janio,

Tem erros que realmente nao tem como contornar, só se vc chamar o procedure main do seu sistema de novo voltando tudo ao inicio
Vagner,

O exemplo que postei acima faz isso. Pode ser o erro que for. A funçao acima resolve o meu problema, a nao ser pelo fato de nao criar o error.log.

Se eu consegui fazer com que seja criado o ERROR.LOG ou EQUIVALENTE, blz... resolvido o meu problema.

Jânio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Mensagem por vagucs »

Janio, pegue um errorsys que tem no meu e coloque as rotinas de log entao. vai ficar bacana.
Sem mais
Wagner Nunes
www.vagucs.com.br
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem por janio »

Valeu Pessoal!


Alterei o ErroSys.prg para chamar minha função inicial logo após um erro e ficou SHOW!

:|< -:] :* :xau ´o)

Obrigado a todos,

Jânio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Que bom que resolveu, se quiser tem um exemplo aqui que manda até por email o error.log....

Abraços
Leonardo Machado
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Responder