Handling errors during execution

A serious error during execution (such as attempting to access a window that has not been opened) will trigger the SystemError event in the Application object if you have not added exception handling code to take care of the error.

If there is no SystemError script

If you do not write a SystemError script to handle these errors, PocketBuilder displays a message box containing the following information:

There is also an OK button that closes the message box and stops the application.

If there is a SystemError script

If there is a script for the SystemError event, PocketBuilder executes the script and does not display the message box. Whether or not you have added TRY/CATCH blocks to your code to trap errors, it is a good idea to build an application-level script for the SystemError event to trap and process any runtime errors that have not been handled, as described in “Using the Error object”.

For more information about handling exceptions, see the Resource Guide.

Using the Error object

In the script for the SystemError event, you can access the built-in Error object to determine which error occurred and where it occurred. The Error object contains the properties shown in Table 25-4.

Table 25-4: Properties of the Error object

Property

Data type

Description

Number

Integer

Identifies the error.

Text

String

Contains the text of the error message.

WindowMenu

String

Contains the name of the window or menu in which the error occurred.

Object

String

Contains the name of the object in which the error occurred. If the error occurred in a window or menu, the Object property will be the same as the WindowMenu property.

ObjectEvent

String

Contains the event for which the error occurred.

Line

Integer

Identifies the line in the script at which the error occurred.

NoteDefining your own Error object You can customize your own version of the Error object by defining a class user object inherited from the built-in Error object. You can add properties and define object-level functions for your Error object to allow for additional processing. In the Application painter, you can then specify that you want to use your user object inherited from Error as the global Error object in your application. For more information, see “Building a standard class user object”.

Runtime error numbers

Table 25-5 lists the runtime error numbers returned in the Number property of the Error object and the meaning of each number.

Table 25-5: Runtime errors

Number

Meaning

1

Divide by zero.

2

Null object reference.

3

Array boundary exceeded.

4

Enumerated value is out of range for function.

5

Negative value encountered in function.

6

Invalid DataWindow row/column specified.

7

Unresolvable external when linking reference.

8

Reference of array with null subscript.

9

DLL function not found in current application.

10

Unsupported argument type in DLL function.

11

Object file is out of date and must be converted to current version.

12

DataWindow column type does not match GetItem type.

13

Unresolved property reference.

14

Error opening DLL library for external function.

15

Error calling external function name.

16

Maximum string size exceeded.

17

DataWindow referenced in DataWindow object does not exist.

18

Function does not return value.

19

Cannot convert name in Any variable to name.

20

Database command has not been successfully prepared.

21

Bad runtime function reference.

22

Unknown object type.

23

Cannot assign object of type name to variable of type name.

24

Function call does not match its definition.

25

Double or Real expression has overflowed.

26

Field name assignment not supported.

27

Cannot take a negative to a noninteger power.

29

Nonarray expected in ANY variable.

30

External object does not support data type name.

31

External object data type name not supported.

32

Name not found calling external object function name.

33

Invalid parameter type calling external object function name.

34

Incorrect number of parameters calling external object function name.

35

Error calling external object function name.

36

Name not found accessing external object property name.

37

Type mismatch accessing external object property name.

38

Incorrect number of subscripts accessing external object property name.

39

Error accessing external object property name.

40

Mismatched ANY data types in expression.

41

Illegal ANY data type in expression.

42

Specified argument type differs from required argument type at runtime in DLL function name.

43

Parent object does not exist.

44

Function has conflicting argument or return type in ancestor.

45

Internal table overflow; maximum number of objects exceeded.

46

Null object reference cannot be assigned or passed to a variable of this type.

47

Array expected in ANY variable.

48

Size mismatch in array to object conversion.

49

Type mismatch in array to object conversion.

51

Bad argument list for function/event.

58

Object instance does not exist.

59

Invalid column range.

60

Invalid row range.

61

Invalid conversion of number dimensional array to object.

62

Server busy.

63

Function/event with no return value used in expression.

64

Object array expected in left side of assignment.

65

Dynamic function not found. Possible causes include: pass by value/reference mismatch.

66

Invalid subscript for array index operation.

67

NULL object reference cannot be assigned or passed to an autoinstantiate.

68

NULL object reference cannot be passed to external DLL function name.

69

Function name cannot be called from a secured runtime session.

70

External DLL function name cannot be called from a secured runtime session.

71

General protection fault occurred.

72

name failed with an operating system error code of number.

73

Reference parameters cannot be passed to an asynchronous shared/remote object method.

74

Reference parameters cannot be passed to a shared object method.

76

Passing NULL as a parameter to external function name.

77

Object passed to shared/remote object method is not a nonvisual user object.

79

The argument to name must be an array.

81

Function argument file creator must be a four character string.

82

Function argument file type must be a four character string.

83

Attempt to invoke a function or event that is not accessible.

84

Wrong number of arguments passed to function/event call.

85

Error in reference argument passed in function/event call.

86

Ambiguous function/event reference.

88

Cannot ask for ClassDefinition Information on open painter: name.

90

Cannot assign array of type name to variable of type array of name.

91

Cannot convert name in Any variable to name. Possible cause uninitialized value.

92

Required property name is missing.

96

Exception Thrown has not been handled.

97

Cannot save name because of a circular reference problem.

98

Obsolete object reference.

Some errors terminate the application immediately. They do not trigger the SystemError event.

SystemError event scripts

A typical script for the SystemError event includes a CHOOSE CASE control structure to handle specific errors. To stop the application, include a HALT statement in the SystemError script.

NoteCaution You can continue your application after a SystemError event, but doing so can cause unpredictable and undesirable effects. Where the application will resume depends on what caused the error. Typically, you are better off reporting the problem to the user, then stopping the application with HALT.

StepsTo test the SystemError event script:

  1. Assign values to the properties of the Error object with the PopulateError function.

  2. Call the SignalError function to trigger the SystemError event.

    The script for the SystemError event executes.