bError := ErrorBlock( {|e| Break(e) } )
begin sequence
DBUSEAREA( .T.,, "SELECT * FROM ativ where data>'"+alltrim(str(year(date()-2)))+"-"+substr(dtoc(date()-2),4,2)+"-"+substr(dtoc(date()-2),1,2)+"'", "ativ")
recover
logerro()
mandmail1("error.log","Erro recuperado com o recover no fazmail")
endsequence
ErrorBlock( bError )
Só que para isso eu precisei apenas separar uma parte do meu arquivo errorsys.prg em uma função que chamei logerro(), apenas para construir o error.log. Ficou assim:
function logerro
cMessage := "Ocorreu o erro: "+ansi(cMessage) + Hb_Eol()
cMessage += "Data..........: "+dtoc(date())+ Hb_Eol()
cMessage += "Hora..........: "+time() + Hb_Eol()
cMessage += "Máquina.......: "+netname() + hb_eol()
cMessage += "Programa......: " + Hb_CmdArgArgV() + Hb_Eol() //+ hb_eol()
cMessage += ansi("Versão........: ") + vers + Hb_Eol() + Hb_Eol()
cMessage += ansi("Na função.....: ") + ProcName(2) + Hb_Eol() //+ hb_eol()
cMessage += "Na linha......: " + NTRIM(ProcLine(2)) + Hb_Eol() //+ hb_eol()
cMessage += "No prg........: " + procfile(2) + Hb_Eol() + hb_eol()
cMessage += "Pasta.........: " + CurDir() + Hb_Eol()
cMessage += ansi("Usuário.......: ") + us + Hb_Eol()
cMessage += "Base em uso...: " + Alias() + Hb_Eol()
cMessage += ansi("Área em uso...: ") + alltrim(str(select())) + Hb_Eol()
cMessage += hb_eol() + ansi("Área 1........: ") + alias(1) + Hb_Eol()
cMessage += if(!empty(alias(2)),ansi("Área 2........: ") + alias(2) + Hb_Eol(),"")
cMessage += if(!empty(alias(3)),ansi("Área 3........: ") + alias(3) + Hb_Eol(),"")
cMessage += if(!empty(alias(4)),ansi("Área 4........: ") + alias(4) + Hb_Eol(),"")
cMessage += if(!empty(alias(5)),ansi("Área 5........: ") + alias(5) + Hb_Eol(),"")
cMessage += if(!empty(alias(6)),ansi("Área 6........: ") + alias(6) + Hb_Eol(),"")
cMessage += if(!empty(alias(7)),ansi("Área 7........: ") + alias(7) + Hb_Eol(),"")
cMessage += if(!empty(alias(8)),ansi("Área 8........: ") + alias(8) + Hb_Eol(),"")
cMessage += if(!empty(alias(9)),ansi("Área 9........: ") + alias(9) + Hb_Eol(),"")
cMessage += Hb_Eol()
cMessage += "Caminho Percorrido Antes do Erro:" + Hb_Eol()
i := 2
While ( !Empty( ProcName(i) )) //.and. procname(i)#"MAIN" )
cMessage += "Vindo de......: " + Trim(ProcName(i)) + "(" + NTRIM(ProcLine(i)) + " - " + procfile(i) + ")" + Hb_Eol() + hb_eol()
i++
EndDo
cMessage += Hb_Eol()+"Mem¢ria dispon¡vel para valores caracteres: "+alltrim(str(memory(0)))
cMessage += Hb_eol()+"Maior bloco dispon¡vel para valores caracteres: "+alltrim(str(memory(1)))
cMessage += Hb_eol()+"µrea dispon¡vel para comandos RUN: "+alltrim(str(memory(2)))
cMessage += Hb_Eol()
cMessage += Hb_Eol()
cMessage += "V¡deo Screen Dump:" + Hb_Eol()
cMessage += Replicate( '-', nCols -15 ) + Hb_Eol()
nCellSize := len( Savescreen( 0, 0, 0, 0 ) )
nRange := ( nCols + 1 ) * nCellSize
For nCount := 1 To nRows + 1
cOutString := ''
cSubString := Substr( cScreen, nStart, nRange )
For nForLoop := 1 To nRange step nCellSize
cOutString += Substr( cSubString, nForLoop, 1 )
Next
cMessage += "|" + cOutString + "|" + Hb_Eol()
nStart += nRange
Next
cMessage += Replicate( '-', nCols -18 ) + Hb_Eol()
Use
Ferase( "error.log")
MemoWrit( "error.log", cMessage )
return