ONERRGO |
Onerrgopermet dans un traitement de déclarer une étiquette où se déroutera l'exécution du traitement en cas d'erreur.
Onerrgo[ étiquette ] [From traitement ]
Elément | Description | Restrictions |
Etiquette de branchement en casd'erreur. | Aucune. | |
Traitement dans lequel est définie l'étiquette (par défaut, il s'agit du traitement courant), sous l'une des formes suivantes : | Le traitement doit être accessible. | |
Expression alphanumérique dont le résultat est un nom de traitement. | Le traitement doit être accessible. |
# Ouverture d'un fichier avec gestion des erreurs (on aurait pu
# tester l'existence du fichier par la fonction filinfo) suivie d'une
# phase de calcul avec branchement sur une autre routine.
FLAG_ERREUR=0
# Si une erreur arrive, aller à l'étiquette PB_OUVERTURE
OnerrgoPB_OUVERTURE From GESERR
# Ouverture d'un fichier séquentiel
Openi filpath("TXT","TEST","txt")
# Si une erreur arrive en phase de calcul
Onerrgo PB_CALCUL
Gosub CALCUL
# Plus de branchement sur erreur maintenant
Onerrgo
If FLAG_ERREUR
# Arrêt si une erreur s'est produite
End
Endif
#
... suite du traitement ...
#
(suite de l'exemple précédent)
# Routines de gestion d'erreur
$PB_CALCUL
Errbox "Erreur en phase de calcul"-errmes$(errn)
FLAG_ERREUR = errn
Resume : # Retour à la ligne suivant l'erreur
#
# Etiquette définie dans le traitement GESERR
$PB_OUVERTURE
Error "Problème d'ouverture du fichier en ligne"-errl
Error "Erreur no"-errn-":"-errmes$(errn)
FLAG_ERREUR = errn
Resume : # Retour à la ligne suivant l'erreur
Onerrgopermet de définir une étiquette où se déroute l'exécution d'un traitement en cas d'erreur. Après l'ordre Onerrgo, si une erreur se produit, la partie de traitement qui suit l'étiquette est exécutée.
Dans ce traitement d'erreur :
On peut définir l'étiquette appelée par Onerrgo, dans un autre traitement. Il faut alors en préciser le nom dans l'instruction. Ce mécanisme permet de se constituer des traitements généraux de gestion d'erreur.
Onerrgosans étiquette supprime la référence à une étiquette en cas d'erreur; par la suite, toute erreur provoque une interruption du traitement, et l'affichage d'un message d'erreur.
Un traitement de gestion d'erreur se termine soit par Resume, soit par End. Dans le premier cas, l'exécution du traitement interrompu par l'erreur reprendra à l'instruction suivant celle où s'est produit l'erreur. Dans le deuxième cas, le traitement est interrompu de façon définitive.
Le traitement de gestion d'erreur ne peut, en aucun cas, terminer une transaction, que ce soit par Commit ou par Rollback, car il ne peut pas être du même niveau de localité que le traitement qui la initiée.
S'il y a une transaction en cours quand l'erreur est détectée, elle est annulée automatiquement (Rollback) si le traitement se termine par End. L'utilisateur en sera averti.
Les codes d'erreurs renvoyés errn sont des entiers positifs supérieurs ou égaux à 5; dans le manuel de référence, ces erreurs sont toutes désignées par un symbole suivi de la valeur numérique de l'erreur (par exemple "PAFIC (20)" pour l'erreur fichier inexistant). Dans le manuel de programmation, un chapitre des annexes donne la liste des symboles et des valeurs numériques d'erreur. Par ailleurs, la fonction errmes$ permet de trouver le message d'erreur correspondant à un code d'erreur donné et la fonction errm permet de préciser celui-ci.
Une déclaration Onerrgo reste valide tant que l'on ne quitte pas le traitement (elle est simplement ignorée entre le moment où on débute le traitement d'erreur et le Resume, mais elle reprend aussitôt après).
Dès qu'une gestion d'erreurs est faite dans un traitement, elle agit aussi dans chaque sous-programme appelé par Call. Cependant, si un sous-programme ne comporte pas d'Onerrgo, et qu'une erreur se produit lors de son exécution, le sous-programme va s'arrêter, et le traitement appelant va traiter l'erreur. Si l'instruction Resume termine le traitement de gestion d'erreur, son exécution relancera les instructions du traitement appelant, celles du sous-programme placées après celle ayant produit l'erreur étant alors ignorées (dans le cas d'un End, l'arrêt du traitement appelant est définitif). Il est donc impératif d'utiliser Onerrgodans un sous-programme appelé par Call pour y gérer les erreurs spécifiques.
PAFIC(20) | Traitementinexistant. |
ERLAB(39) | Etiquetteinexistante (dans la syntaxe " |
ERMODE(10) | exp_nomtrtn'est pas une expression alphanumérique. |
END - RESUME - ERRN - ERRL - ERRP - ERRMES$ - ERRM - CALL - ERRBOX - ENDBOX
Adonix X3(r) L4G |