titre_site.jpg (51607 octets)

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.

 ico_MsDos.jpg (1668 octets)  dbasedos.gif (376 octets) vdb5.gif (351 octets) Description

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( ).

Plus2_5-Icon.jpg (1250 octets) xDML vers ooDML

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.

 

Code      ico_dbIII.jpg (1345 octets)   dbasedos.gif (376 octets)   vdb5.gif (351 octets)   Plus2_5-Icon.jpg (1250 octets)

vdb5.gif (351 octets) 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

Plus2_5-Icon.jpg (1250 octets) 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

 

ico_duflp.gif (1875 octets) dUFLP :

Si vous désirez "sonoriser" l'affichage d'une erreur, vous pouvez consulter SoundAPI.cc.

 

bug_jpg.jpg (2635 octets)  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.