Tratamento de Erros no clipper.
Moderador: Moderadores
Tratamento de Erros no clipper.
Como tratar um erro para quer o programa não aborte?
Por exemplo: alias does not exist - Dos Error 3 - O sistema aborta.
Não quero que ele aborte, apenas dê a mensagem por n segundos e eu siga meu processo no sistema. É um sistema em lote, que fica rodando continuamente na retaguarda, abrindo o sistema em terminais. Se um terminal é ressetado, pode vir a dar este erro. Mas o sistema deve continuar processando.
Aguardo retorno.
Sds,
Eliseu Schneider
Módulo Info
Por exemplo: alias does not exist - Dos Error 3 - O sistema aborta.
Não quero que ele aborte, apenas dê a mensagem por n segundos e eu siga meu processo no sistema. É um sistema em lote, que fica rodando continuamente na retaguarda, abrindo o sistema em terminais. Se um terminal é ressetado, pode vir a dar este erro. Mas o sistema deve continuar processando.
Aguardo retorno.
Sds,
Eliseu Schneider
Módulo Info
No exemplo que você citou, de duas uma: ou o erro é seu ou o erro advém de uma condição que poderia ter sido testada por você. Ou seja, erro seu também. 
Não há uma forma de tratar erros desse tipo para que não aborte o programa, já que, nesta condição, o programa não pode mesmo continuar, por quê não haveria o que fazer. É um erro classificado como catastrófico. Depois que o erro apareceu, não tem jeito. Você deve prover o sistema com mecânismos que evitem o erro e assim, o aborto. Feito isso, do jeito certo, nunca aparecerão erros desses tipo.
Exemplo: DOS ERROR 3, como está nesta sua mensagem, significa "path not found". Você deveria ter tratado disso antes de tentar abrir o arquivo.
Não há uma forma de tratar erros desse tipo para que não aborte o programa, já que, nesta condição, o programa não pode mesmo continuar, por quê não haveria o que fazer. É um erro classificado como catastrófico. Depois que o erro apareceu, não tem jeito. Você deve prover o sistema com mecânismos que evitem o erro e assim, o aborto. Feito isso, do jeito certo, nunca aparecerão erros desses tipo.
Exemplo: DOS ERROR 3, como está nesta sua mensagem, significa "path not found". Você deveria ter tratado disso antes de tentar abrir o arquivo.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno, mas não há um modo de o Modulo usar a classe ErrorSys para interceptar essa mensagem e mandar o sistema apenas exibir essa mensagem de erro, e dar um loop para continuar? Acho que é isso que ele quer fazer, embora eu também não saiba como. Sei que no Visual Basic tem como, mas estamos falando de Clipper... ´o)
Clipper 5.2e + DBFCDX + Exospace 1.0g
Se a possibilidade de erro for tratada adequadamente, não será necessário modificar o tratamento de erros pra poder continuar a execução do programa. Foi isso o que eu quis dizer.
Acho que modificar o tratador de erros só pro programa não abortar, é algo totalmente desnecessário.
Acho que modificar o tratador de erros só pro programa não abortar, é algo totalmente desnecessário.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Bom, o que o Maligno disse eu concordo...se ajustar o sistema certinho, não vejo motivo de ele dar erro...agora...jah vi sistema que trata o erro do erro...hehe e retorna na boa para o sistema...até mesmo quando a cagada é feia...mas infelizmente não tenho o sistema e muito menos os fontes desse sistema...somente vi em um cliente e percebi que isso é possviel...
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
Uma gambiarra totalmente desnecessária.jah vi sistema que trata o erro do erro...
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Tmb. acho...mas só sei que funciona bem...alias lembrando um exemplo de errosys é o que esta na seção de Download aqui do site do PCTOLEDO...Maligno escreveu:Uma gambiarra totalmente desnecessária.
https://pctoledo.org/download/cop ... t&deonde=2
Abraços
Leonardo Machado
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
Pessoal, tem uma saída, nativa do Clipper: BEGIN SEQUENCE / RECOVER USING / END. Tá no NG, em Statements. Montei esse esquema em um sistema meu, pra testar, e funciona legal. Não controla 100% dos erros, mas chega bem perto.
Se dá um pau qualquer, eu faço voltar (de onde estiver) pro Menu inicial, isto depois de mostrar na tela qual erro foi, em que rotina e linha etc. É bem bacana. E tem nada a ver com o Errorsys.
Se dá um pau qualquer, eu faço voltar (de onde estiver) pro Menu inicial, isto depois de mostrar na tela qual erro foi, em que rotina e linha etc. É bem bacana. E tem nada a ver com o Errorsys.
Retirado de parte do executor do WAPI. Se a função do SwpRunCmd() não estiver ligada ao programa, a função Break() fará o código seguir no "recover". Ou seja, usará o RUN.
No demais, o NG contem muitos outros detalhes.
Código: Selecionar todos
bError := ErrorBlock({|o|Break(o)})
begin sequence
lRet := SwpRunCmd(cCommand,0,,WAPITmpDir())
recover
run (cCommand)
lRet := _kTRUE
end
ErrorBlock(bError)[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Leonardo,
Limpei o que é específico do meu sistema e deixei só o que interessa na recuperação de erros (o que, aliás, é quase cópia do exemplo do NG):
Limpei o que é específico do meu sistema e deixei só o que interessa na recuperação de erros (o que, aliás, é quase cópia do exemplo do NG):
Código: Selecionar todos
* programa principal
do whil .t.
* aqui, achoice com as opções do menu
priv objLocal,bLastHandler
blasthandler:=errorblock({ |objerr| ;
myhandler(objerr,.t.,procname(1)+"("+alltrim(str(procline(1)))+")" , procname(2)+"("+alltrim(str(procline(2)))+")",procname(3)+"("+alltrim(str(procline(3)))+")",procname(4)+"("+alltrim(str(procline(4)))+")") })
begin sequence
do case
* aqui as funções de cada opção do menu
endc
* se houve algum pau no DO CASE, aciona o RECOVER
recover using objlocal
clos databases
if objlocal:genCode != 0
? "ERRO"
a=listaerro[1]
a=iif("(0)"$listaerro[2],a,a+", "+listaerro[2])
a=iif("(0)"$listaerro[3],a,a+", "+listaerro[3])
a=iif("(0)"$listaerro[4],a,a+", "+listaerro[4])
?"* Rotina: "+a
?"* Descrição: "+upper(objLocal:description)
?"* Objeto: "+objLocal:operation
do whil .t.
inkey(0)
if lastkey()=27
exit
endi
endd
endi
end
* daqui, volta pro loop, pro menu do programa
errorblock(blasthandler)
endi
enddCódigo: Selecionar todos
FUNCTION MyHandler(objError,lLocalHandler,rot1,rot2,rot3,rot4)
aadd(listaerro,rot1)
aadd(listaerro,rot2)
aadd(listaerro,rot3)
aadd(listaerro,rot4)
IF lLocalHandler
BREAK objError
ENDIF
RETURN NIL


