Clipper On Line • Ver Tópico - Evitar o pause em caso de runtime error.

Evitar o pause em caso de runtime error.

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

Moderador: Moderadores

 

Evitar o pause em caso de runtime error.

Mensagempor FlavioDBF » 03 Jul 2019 10:58

Bom dia a todos do fórum.
Quando um programa compilado pelo Harbour, rodando no prompt de comando, gera um erro durante a execução (runtime error), antes de aparecer o código com o erro, é necessário pressionar a tecla ENTER, só então o programa é interrompido e a mensagem de erro e seu respectivo código aparece.
Gostaria de saber se é possível evitar esse pause e após a detecção de um erro, o programa já ser interompido e gerar o código de erro e outros warnings.
FlavioDBF
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 3
Data de registro: 03 Jul 2019 10:35
Cidade/Estado: goiania/go
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Evitar o pause em caso de runtime error.

Mensagempor JoséQuintas » 04 Jul 2019 08:06

A rotina que trata erros é a ERRORSYS.PRG
Pode pegar esse fonte do Harbour e modifica-lo do jeito que quiser.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18150
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Evitar o pause em caso de runtime error.

Mensagempor FlavioDBF » 17 Jul 2019 11:45

Olá José.
Obrigado pela sugestão.
Consegui resolver o problema com o uso do bloco BEGIN SEQUENCE...RECOVER...END SEQUENCE, que faz o mesmo que as instruções TRY...CATCH...FINALLY faz em outras linguagens.
Dessa forma, ao ocorrer um runtime error, o programa é finalizado e o error code 1 é lançado.
Veja aí como ficou:

* Testando a integridade do arquivo "planilha_regularidade.dbf".
BEGIN SEQUENCE WITH {| oError | oError:cargo := { ProcName( 1 ), ProcLine( 1 ) }, Break( oError ) }
use "c:\SinanDashboard\dbf\ger\planilha_regularidade.dbf\planilha_regularidade.dbf"
RECOVER USING oError
errorlevel(1)
quit
end
FlavioDBF
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 3
Data de registro: 03 Jul 2019 10:35
Cidade/Estado: goiania/go
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Evitar o pause em caso de runtime error.

Mensagempor JoséQuintas » 17 Jul 2019 14:32

Eu não escondo erro dos clientes, se tiver que dar erro aparece lá aberto no bloco de notas.
Mas gravo o erro em um arquivo, e depois envio pra mim por email.
Isso é melhor, porque assim os erros vão ser resolvidos, ao invés de apenas serem escondidos.
Pode aparecer até erro que você nem sabia que existia - aconteceu isso comigo na época do Clipper

Minha errorsys é pública, tá pra quem quiser.
AppVersaoExe() é uma função necessária, mas é só pra retornar a versão do EXE em string "2019.07.17.1428" por exemplo.

Errorsys só precisa mostrar/gravar erro, melhor não alterar mais nada, porque senão pode até atrapalhar ao invés de ajudar.

é basicamente a do Clipper, alterada pra salvar o erro em hb_Out.log, e abrir no bloco de notas.
o nome não foi escolhido à toa: o Harbour já usa esse nome pra outros erros que não passam pela errorsys.
O fonte está aqui:

https://github.com/JoseQuintas/JoseQuintas/blob/master/prg/errorsys.prg

Sobre o email de erro:
O aplicativo, ao detectar um hb_out.log contendo texto, envia por email.
Com isso, faço o teste se o terminal tem acesso à internet - resultado: se o terminal não tem internet, outro que tenha transmite o email.
Simples e prático.

Isso ajudou muuuuuito... ajudou a deixar tudo redondo, e até resolver problemas antes do cliente ligar.
Além de já resolver antes que acontecessem em outros clientes...

É só uma idéia... pense nisso.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18150
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Evitar o pause em caso de runtime error.

Mensagempor FlavioDBF » 19 Jul 2019 08:56

Obrigado pelas considerações e pelas dicas José.
Mas a idéia aqui não é esconder os erros.
Onde eu trabalho utilizamos bastante arquivos DBF para intercâmbio de dados, sendo praticamente um formato padrão para isso, principalmente com a utilização de programas como o Tabwin (http://www2.datasus.gov.br/DATASUS/inde ... rea=060805).
Estou desenvolvendo uma aplicação em C# e consigo manipular os arquivos DBF com SQL usando um drive FoxPro OLE DB Provider. No entanto, essa técnica tem limitações, principalmente quando se trata de blocos de comando.
Dessa forma a solução foi o uso do Harbour.
O programa em C# chama um executável construído em Harbour para realizar algum processamento quando necessário. Acontece que nessa execução do programa feito em Harbour pode ocorrer um erro, como um arquivo DBF que não está onde deveria. Assim, usando o bloco BEGIN SEQUENCE, quando um erro ocorre, a instrução ERRORLEVEL(1) é gerada e em seguida o comando QUIT.
Dessa maneira o programa chamador em C# percebe que um erro aconteceu e trata esse problema:

if (process0.ExitCode != 0)
{
MessageBox.Show("Os campos do arquivo 'planilha_regularidade.dbf' não foram alterados pela classe 'Altera_DBF'.");
erro = "Y";
return this.erro;
}
else
{
erro = "N";
return this.erro;

Além de mostrar uma mensagem para o usuário, um arquivo de log também será gerado com o dia e data do problema usando o framework log4net.
Trata-se de uma dobradinha, C# + Harbour, o melhor de dois mundos.
FlavioDBF
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 3
Data de registro: 03 Jul 2019 10:35
Cidade/Estado: goiania/go
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Evitar o pause em caso de runtime error.

Mensagempor JoséQuintas » 22 Jul 2019 01:34

Basicamente é a função de envio de email do Harbour.
A classe é só pra organizar opções.
ze_sendmailclass.prg
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18150
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Bing [Bot] e 10 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro