Código: Selecionar todos
clear
a = 0
do while .t.
begin sequence
a = a + "10" <-- erro aqui
recover
@ 10,10 say "Erro"
end
exit
enddo
Moderador: Moderadores
Código: Selecionar todos
clear
a = 0
do while .t.
begin sequence
a = a + "10" <-- erro aqui
recover
@ 10,10 say "Erro"
end
exit
enddo
Código: Selecionar todos
Function main()
LOCAL objLocal, bLastHandler, a := 0
Altd()
// Save current and set new error handler // Altera o error handler padrão...
bLastHandler := ERRORBLOCK({ |objErr| MyHandler(objErr, .T.) })
BEGIN SEQUENCE
a = a + "10" // <-- erro aqui
// ==> Neste ponto executa internamente um
// Eval( { |objErr| MyHandler(objErr, .T.) } )
// passando o objeto erro gerado (objErr) como parâmetro
// para o code block que por sua vez é repassado
// para a função manipuladora de erros MyHandler()
RECOVER USING objLocal
// Send messages to objLocal and handle the error
? "Error: "
IF objLocal:genCode != 0 // inspeciona e exibe as variáveis
?? objLocal:description // de instância do objeto error
ENDIF
END
// Restore previous error handler // Restaura o error handler anterior (ErrorSys
ERRORBLOCK( bLastHandler ) // padrão do Clipper ou outro customizado)
RETURN NIL
//-----------------------------------------------------------------------------
FUNCTION MyHandler( objError, lLocalHandler )
// Handle locally returning the error object
IF lLocalHandler // como esta condição é verdadeira,
BREAK objError // devolve (throw) o objeto erro ao
ENDIF // bloco BEGIN SEQUENCE...RECOVER...END,
// que o recebe de volta no parâmetro
RETURN NIL // da cláusula RECOVER (objLocal)Código: Selecionar todos
Function main()
LOCAL objLocal, bLastHandler, a := 0
Altd()
// Save current and set new error handler // Altera o error handler padrão...
bLastHandler := ERRORBLOCK({ |objErr| Break(objErr) })
BEGIN SEQUENCE
a = a + "10" // <-- erro aqui
// ==> Neste ponto executa internamente um
// Eval( { |objErr| MyHandler(objErr, .T.) } )
// passando o objeto erro gerado (objErr) como parâmetro
// para o code block que por sua vez o repassa
// para o parâmetro objLocal, abaixo
RECOVER USING objLocal
// Send messages to objLocal and handle the error
? "Error: "
IF objLocal:genCode != 0 // inspeciona e exibe as variáveis
?? objLocal:description // de instância do objeto error
ENDIF
END
// Restore previous error handler // Restaura o error handler anterior (ErrorSys
ERRORBLOCK( bLastHandler ) // padrão do Clipper ou outro customizado)
RETURN NIL
//-----------------------------------------------------------------------------