ON ERROR
|
statement |
END-ERROR
|
ON ERROR
|
statement | ||
DO statement
DOEND |
Dieses Dokument behandelt folgende Themen:
Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.
Verwandte Statements: DECIDE
FOR
| DECIDE
ON
| IF
|
IF SELECTION
Das Statement ON ERROR
dient dazu, Laufzeitfehler
abzufangen, welche andernfalls eine Natural-Fehlermeldung, den Abbruch des
gerade ausgeführten Programms und die Rückkehr zum Kommandoeingabe-Modus zur
Folge hätten.
Sobald die Ausführung der in einem ON ERROR
-Statement-Block
angegebenen Statements beginnt, ist der normale Programmablauf unterbrochen und
kann nicht fortgesetzt werden. Eine Ausnahme bildet Fehler 3145
(angeforderter Datensatz im Hold), bei dem über ein
RETRY
-Statement die Verarbeitung genau an der Stelle, an der sie
unterbrochen wurde, fortgesetzt werden kann.
Dieses Statement ist nicht prozedural (das heißt, seine Ausführung hängt von einem Ereignis ab, nicht davon, wo im Programm es steht).
Jedes Natural-Objekt darf maximal ein ON ERROR
-Statement
enthalten.
Syntax-Element | Beschreibung |
---|---|
statement...
|
Festlegung der ON ERROR-Verarbeitung:
Um die Verarbeitung zu definieren, die stattfinden soll, wenn eine
Verlassen eines ON
ERROR-Blocks:
Ein |
END-ERROR
|
Ende des ON-ERROR-Statements:
Im Structured Mode muss das für Natural reservierte Schlüsselwort
Im Reporting Mode werden die Statements
|
Wird mittels CALLNAT
,
PERFORM
oder
FETCH RETURN
eine
Unterprogramm-Struktur aufgebaut, so darf jedes Modul dieser Struktur ein
ON ERROR
-Statement enthalten.
Tritt ein Fehler auf, so verfolgt Natural die Unterprogramm-Struktur
automatisch zurück und wählt das erste in einem Unterprogramm gefundene
ON ERROR
-Statement zur Ausführung aus. Enthält keines der Module
ein ON ERROR
-Statement, gibt Natural eine entsprechende
Fehlermeldung aus, und es erfolgt — wie oben beschrieben — ein
Programmabbruch.
Die folgenden Natural-Systemvariablen können in Zusammenhang mit dem
ON ERROR
-Statement (wie in dem folgenden
Beispiel gezeigt) benutzt
werden:
*ERROR-NR
|
Enthält die Fehlernummer des von Natural entdeckten Fehlers |
---|---|
*ERROR-LINE
|
Enthält die Nummer der Sourcecode-Zeile, in der das Statement steht, das den Fehler verursacht hat. |
** Example 'ONEEX1': ON ERROR ** ** CAUTION: Executing this example will modify the database records! ************************************************************************ DEFINE DATA LOCAL 1 EMPLOY-VIEW VIEW OF EMPLOYEES 2 NAME 2 CITY * 1 #NAME (A20) 1 #CITY (A20) END-DEFINE * REPEAT INPUT 'ENTER NAME:' #NAME IF #NAME = ' ' STOP END-IF FIND EMPLOY-VIEW WITH NAME = #NAME INPUT (AD=M) 'ENTER NEW VALUES:' /// 'NAME:' NAME / 'CITY:' CITY UPDATE END TRANSACTION /* ON ERROR IF *ERROR-NR = 3009 WRITE 'LAST TRANSACTION NOT SUCCESSFUL' / 'HIT ENTER TO RESTART PROGRAM' FETCH 'ONEEX1' END-IF WRITE 'ERROR' *ERROR-NR 'OCCURRED IN PROGRAM' *PROGRAM 'AT LINE' *ERROR-LINE FETCH 'MENU' END-ERROR /* END-FIND END-REPEAT END