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 Quellcode-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