aokisantos Posted January 18, 2008 Report Share Posted January 18, 2008 Gente acontece de vez enquando este erro: Zero divisor: / O problema é que sistema aborta sem gerar o error.log. Alguem sabe como contornar? Pois não sei como resolver e o sistema não chega nem a gerar o error.log. Para descobrir este erro fiz um controle de erro, assim: bOldError := ErrorBlock( {|e| BReak(E) }) errorblock({ |oErro, a, b, c| Erro_LiberaMesa(oErro), eval(bOldError, oErro, a, b, c)}) /******************************************************************************/ function Erro_LiberaMesa(oerro) /* */ local nArq,nFWarq:="Erro"+SUBSTR(TIME(),4,2)+SUBSTR(TIME(),7,2)+".txt",cstack:="" cstack:="FIVEWIN ERROR:"+CRLF cstack+=dtoc(date())+" "+time()+" error: "+oErro:description+": "+oErro:Operation+CRLF cstack+=" Line: "+Str( ProcLine(), 4 )+" Arquivo: "+procfile()+ CRLF cstack+=" Line: "+Str( ProcLine(1), 4 )+ CRLF cstack+=" Line: "+Str( ProcLine(2), 4 )+ CRLF cstack+=" Line: "+Str( ProcLine(3), 4 )+ CRLF MemoWrit(Curdrive()+':\'+curdir()+'\'+nFWarq,cstack) return(.t.) FWH25+XHARB 99.50+WS+SQLLIB+MYSQL Msn: aokisantos@hotmail.com Quote Link to comment Share on other sites More sharing options...
aokisantos Posted January 18, 2008 Author Report Share Posted January 18, 2008 Gente acontece de vez enquando este erro: Zero divisor: / O problema é que sistema aborta sem gerar o error.log. Alguem sabe como contornar? Pois não sei como resolver e o sistema não chega nem a gerar o error.log. Para descobrir este erro fiz um controle de erro, assim: bOldError := ErrorBlock( {|e| BReak(E) }) errorblock({ |oErro, a, b, c| Erro_LiberaMesa(oErro), eval(bOldError, oErro, a, b, c)}) /******************************************************************************/ function Erro_LiberaMesa(oerro) /* */ local nArq,nFWarq:="Erro"+SUBSTR(TIME(),4,2)+SUBSTR(TIME(),7,2)+".txt",cstack:="" cstack:="FIVEWIN ERROR:"+CRLF cstack+=dtoc(date())+" "+time()+" error: "+oErro:description+": "+oErro:Operation+CRLF cstack+=" Line: "+Str( ProcLine(), 4 )+" Arquivo: "+procfile()+ CRLF cstack+=" Line: "+Str( ProcLine(1), 4 )+ CRLF cstack+=" Line: "+Str( ProcLine(2), 4 )+ CRLF cstack+=" Line: "+Str( ProcLine(3), 4 )+ CRLF MemoWrit(Curdrive()+':\'+curdir()+'\'+nFWarq,cstack) return(.t.) FWH25+XHARB 99.50+WS+SQLLIB+MYSQL Msn: aokisantos@hotmail.com Quote Link to comment Share on other sites More sharing options...
kapiaba Posted January 18, 2008 Report Share Posted January 18, 2008 cstack+=dtoc(date())+" "+time()+" error: "+oErro:description+": "+oErro:Operation+CRLF Pare esta linha e veja o que ocorre. João Santos - São Paulo. kmt_karinha@pop.com.br kapiaba@brfree.com.br Fone: (11) 3106-2832 FWH 2.7 - xHARBOUR 0.99.61 - WorkShop.Exe Quote Link to comment Share on other sites More sharing options...
evandro Posted January 18, 2008 Report Share Posted January 18, 2008 Olá, Suponho que seja por causa de divisão por zero. Eu uso uma função para isto: return iif( nVar2=0 .or. nVar1=0, 0, nVar1/nVar2 ) id=code>id=code>E substituo nVar1/nVar2 por DiviZero( nVar1, nVar2 ) []s, Evandro G. de Paula Curvelo - MG evandro@skillnet.com.br (Escr. - na Cidade) imortal@skillnet.com.br (Res. - na Roça) FWH 2.6+PellesC+MyMake+xHarbour.org 0.99.5+SqlLib I PREPARATÓRIO PARA O VI ENCONTRO FIVEWIN - JULHO/2008 - CURVELO - MG Quote Link to comment Share on other sites More sharing options...
Yury Posted January 18, 2008 Report Share Posted January 18, 2008 olá, o clipper/xharbour não aceita q um número seja dividido por zero... você pode tratar isto de forma transparente para o sistema, sem ter que verificar todas as operações de divisão que a sua aplicação está fazendo... sugiro que implemente a sua própria rotina de tratamento de erros e coloque este trecho nela: #include "Error.ch" IF objErro:genCode == EG_ZERODIV RETURN(0) ENDIF id=code>id=code>onde objErro é o objeto de erro passado pelo ErrorBlock... é mais ou menos oq o Evandro sugeriu, porém como eu disse funciona de forma transparente, sem precisar mudar programa a programa.... um abraço Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say Editado por - yury on 19/01/2008 00:40:04 Quote Link to comment Share on other sites More sharing options...
aokisantos Posted January 19, 2008 Author Report Share Posted January 19, 2008 Pessoal, obrigado pela ajuda. Alguem sabe como chamar uma função minha antes do errorsys padrão do FWH? Ou seja, deu o erro, executa minha função mais cai no errorsys padrão do FW. Grato FWH25+XHARB 99.50+WS+SQLLIB+MYSQL Msn: aokisantos@hotmail.com Quote Link to comment Share on other sites More sharing options...
Yury Posted January 19, 2008 Report Share Posted January 19, 2008 olá, declare a procedure ErrorSys() na função principal do seu sistema ou mesmo em um .prg isolado e compile junto... passará a executar o errorsys() declarado e não mais o nativo... aà de dentro dela vc chama a sua função de erros... #include 'Error.ch' Procedure ErrorSys() ErrorBlock( { | o | Meus_Erros( o ) } ) return Function Meus_Erros( o ) IF o:genCode == EG_ZERODIV RETURN(0) ELSEIF... ELSEIF... ENDIF return id=code>id=code>um abraço Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.