| xHarbour Reference Documentation > Function Reference |
![]() |
![]() |
![]() |
Sets or retrieves the error handling code block.
ErrorBlock( [<bErrorBlock>] ) --> bLastErrorBlock
The return value is the currently installed error handling code block.
The error code block is part of the runtime error handling system of xHarbour and can be retrieved or defined with the ErrorBlock() function. A default error code block is installed at program startup in the ErrorSys() routine.
By default, the error code block is evaluated when a runtime error occurs ouside a TRY...CATCH control structure. An error object is filled with error information by the xHarbour runtime kernel and passed on to the error code block. The error code block can then call a user defined error handling routine, or pass the Error object on to the Break() function, which, in turn, passes the Error object on to the RECOVER option of the BEGIN SEQUENCE statement.
If the error code block does not call Break(), its return value must be of logical data type to instruct the error handling system how to proceed with error handling. If .T. (true) is returned, the offending operation is retried, while .F. (false) instructs the error handling system to ignore the error and resume processing.
Note: the error code block is part of xHarbour's Clipper compatible error handling system and not recommended to use in new applications. Instead, xHarbour's moder TRY...CATCH error handling control structure provides a modern and more flexible way for programming runtime error recovery.
| See also: | BEGIN SEQUENCE, Break(), ErrorNew(), ErrorSys(), TRY...CATCH |
| Category: | Error functions , Debug functions |
| Source: | vm\errorapi.c |
| LIB: | xhb.lib |
| DLL: | xhbdll.dll |
// This example uses offensive error handling by assuming that
// index files required for a database exist. If they do not
// exist, they are created in the RECOVER section of the BEGIN
// SEQUENCE statement.
PROCEDURE Main
OpenCustomer()
? "Files are open"
? "Program can start"
RETURN
PROCEDURE OpenCustomer
LOCAL oError, n
LOCAL bError := ErrorBlock( {|e| Break(e) } )
FOR n := 1 TO 2
BEGIN SEQUENCE
// regular code
USE Customer NEW SHARED
SET INDEX TO Cust01, Cust02
ErrorBlock( bError )
RECOVER USING oError
// error handling code
ErrorBlock( bError )
USE Customer NEW EXCLUSIVE
INDEX ON CustNo TO Cust01
INDEX ON Upper(LastName+FirstName) TO Cust02
USE
// go back to open DBF in SHARED mode
LOOP
ENDSEQUENCE
EXIT
NEXT
RETURN
// This example does the same as the previous one, except that
// it uses TRY...CATCH instead of an error code block.
PROCEDURE Main
OpenCustomer()
? "Files are open"
? "Program can start"
RETURN
PROCEDURE OpenCustomer
LOCAL n
FOR n:=1 TO 2
TRY
// regular code
USE Customer NEW SHARED
SET INDEX TO Cust01, Cust02
CATCH
// error recovery
USE Customer NEW EXCLUSIVE
INDEX ON CustNo TO Cust01
INDEX ON Upper(LastName+FirstName) TO Cust02
USE
LOOP
END
EXIT
NEXT
RETURN
http://www.xHarbour.com