| |

ON ERROR
Exécute une commande spécifiée lorsqu'une erreur se produit.
Syntaxe
ON ERROR [<commande>]
<commande>
La commande à exécuter lorsqu'une erreur se produit dans le programme, la procédure ou
la fonction utilisateur. Pour exécuter plusieurs commandes quand l'erreur survient, il
faut employer ON ERROR DO <fichier>, où <fichier> est un fichier programme ou
procédure contenant la séquence de commandes à exécuter. ON ERROR utilisée sans
l'option <commande> désactive toute commande ON ERROR <commande>
précédente.
ON ERROR permet de contrôler la réponse d'un programme aux erreurs
d'exécution. Par exemple, <commande> peut spécifier un nouveau message à la place
d'un message d'erreur standard. Quand ON ERROR est active, dBASE n'affiche pas ses
messages par défaut d'erreur d'exécution.
Pendant que dBASE exécute une commande ON ERROR, l'instruction ON ERROR <commande>
est désactivée. De cette manière, si une autre erreur se produit lors de l'exécution
de <commande>, dBASE répond avec ses messages d'erreur par défaut. Cependant, il
est possible de définir une autre condition ON ERROR à l'intérieur d'un sous-programme
appelé par ON ERROR.
ON ERROR <commande> n'a pas d'effet lors des commandes suivantes :
- APPEND
- CREATE/MODIFYAPPLICATION/LABEL/REPORT/SCREEN/STRUCTURE/VIEW
- MODIFY COMMAND/FILE
ON ERROR est similaire à ON ESCAPE et ON KEY. ON ESCAPE spécifie à dBASE une commande
à exécuter lorsque la touche Echap est appuyée, si SET ESCAPE est à ON. ON KEY
spécifie à dBASE une commande à exécuter lorsqu'une touche spécifique est appuyée.
Il faut éviter d'utiliser récursivement une commande dBASE avec ON ERROR.
Voir dans la description de ERROR( ), le tableau de
comparaison de CERROR( ), ERROR( ), MESSAGE( ), DBERROR( ),
DBMESSAGE( ), SQLERROR( ), et SQLMESSAGE( ).
Bien que la commande ON ERROR n'est pas à proprement parler une commande
XBase, il est utile de noter qu'il y a une autre façon de piégeage des erreurs : try /
catch. Encore plus intéressant, c'est que cette série de commandes peut être réglée
spécifiquement pour détecter les erreurs de données (DBEXCEPTION).
Bien que cela soit mentionné ici, vous devriez passer un peu de temps dans l'aide en
ligne pour examiner les exemples et le code.
La syntaxe de base de try / catch est la suivante:
TRY
// ici la ou les commandes à exécuter
CATCH( DBEXCEPTION D ) // attrape une exception de données
msgbox( d.error )
CATCH( EXCEPTION E ) // capture d'autres exceptions
msgbox( e.error )
ENDTRY |
Il existe d'autres options, comme une clause FINALLY, et la capacité de
"lancer" une erreur vous-même. Voir l'aide en ligne pour plus de détails.
Dans
l'exemple suivant, ON ERROR ouvre une fenêtre définie par l'utilisateur lorsqu'une
erreur d'exécution se produit. Dans l'exemple, la commande ? Company( ) provoque une
erreur car la fonction Company n'existe pas :
ON ERROR DO SuiviErr WITH ERROR( ),
MESSAGE( ),;
PROGRAM( ), LINENO( )
USE CLIENTEL
? Company( )
RETURN
PROCEDURE SuiviErr
PARAMETERS nERRORno, cErrMessage, cProgram, nLineNo
DEFINE FORM EnAvant from 10,25 TO 20,50
DEFINE TEXT Line1 OF HeadsUp AT 2,2 ;
PROPERTY Text "Une erreur s'est produite",;
Width 22
DEFINE TEXT Line2 OF HeadsUp AT 4,2;
PROPERTY Text "Erreur : " + cErrMessage,;
Width 22
DEFINE TEXT Line3 OF HeadsUp AT 5,2;
PROPERTY Text "Numéro : " + STR(nErrorno),;
Width 22
DEFINE TEXT Line4 OF HeadsUp AT 6,2;
PROPERTY Text "Programme : "+ cProgram,;
Width 22
DEFINE TEXT Line5 OF HeadsUp AT 7,2;
PROPERTY Text "Ligne N° : " + STR(nLineno),;
Width 22
OPEN FORM EnAvant |
Supposons que vous organisiez une gestion de votre
application avec comme caractéristique l'objet global _app. La commande suivante ON ERROR
spécifie une méthode particulière qui permet à cet objet d'agir comme un gestionnaire
d'erreur global : un appel de méthode est une instruction valide. Il passe toutes les
informations pertinentes de l'erreur à la méthode en tant que paramètres:
on error _app.core.globalErrorTrap(program(),
lineno(), error(), message()) |
Le gestionnaire de ON ERROR peut alors afficher un message d'erreur et
mettre fin à l'application, comme ceci:
function globalErrorTrap(cProg, nLineno, nError,
cMsg)
local c
#define CHAR_CR chr(13)
c = cMsg + CHAR_CR + CHAR_CR + ;
"Dans : " + cProg + CHAR_CR + ;
"Ligne : " + nLineno + CHAR_CR + CHAR_CR + ;
"Si l'erreur persiste, contactez votre vendeur."
msgbox(c, "Erreur innattendue [" + nError +"]", 16)
quit // ferme
l'application |
Si vous désirez "sonoriser" l'affichage d'une erreur, vous
pouvez consulter SoundAPI.cc.
Note
|
Garder une trace des erreurs lors du travail à
partir de la fenêtre de commande
Paramétrer les propriétés de votre bureau pour sauvegarder les erreurs
dans un fichier (réglage)
retour
Sources :
Aide Visual dbase V5.7
http://www.dbase.com/Knowledgebase/INT/xb2vdb7oodml/x2oodml.htm par Ken Mayer
Aide dBase Plus 2.6.0
dUFLP version W
Retour à l'accueil
Les informations de cette page sont données à titre indicatif et ne se substituent
pas à celles contenues dans l'Aide de votre version de dBase qui reste la meilleure
documentation.
Si vous voyez des erreurs, ou souhaitez apporter des compléments, n'hésitez pas à le signaler.
Dernière modification : mardi 17 août 2010
© M.Abraham.
|