Passser outre une erreur dans delphi [Résolu]

codial 270 Messages postés mercredi 14 avril 2004Date d'inscription 5 mai 2015 Dernière intervention - 4 févr. 2006 à 10:58 - Dernière réponse : cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention
- 4 févr. 2006 à 14:18
Bonjour,

n'étant pas très familier avec la gestion des exceptions sous Delphi, je cherche l'équivalent de On resume next de VB qui permet de passer outre l'erreur et de continuer le programme.

Dans mon cas je lis un fichier texte et je mets à jour une table Access et je voudrais que la boucle continue apres une erreur d'enregistrement:

while not eof(f) do begin
// Numéro de la FT If (copy(chaine,30,2) 'FT') or (copy(chaine,30,2) 'BT') or (copy(chaine,30,2) = 'BS') Then
begin
progress:=progress+1;
strNumDoc:=copy(chaine,30,30);
strDoc:= copy(chaine,61,255);
try
DM.tbl_RefDoc.Insert;
DM.tbl_RefDoc.FieldByName('Num_Doc').asString:=strNumDoc;===========> Index primaire
DM.tbl_RefDoc.FieldByName('Clair_Doc').asString:=strDoc;
DM.tbl_RefDoc.Post;
ProgressBar1.Position := Progress;
except on Exception do
//Ici quand il s'agit d'un doublon je voudrais que la boucle continue.................
end;
end;
end;
showmessage('Importation terminée..');
CloseFile(f);
Progressbar1.Visible := false;


end;
end;

Dans l'attente

Bien cordialement

Codial
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 4 févr. 2006 à 11:55
3
Merci
S'il s'agit d'une erreur d'insertion quand tu rencontres un doublon, alors tu peux annuler cette insertion en ajoutant DM.tbl_RefDoc.Cancel dans le bloc de gestion de l'exception.
Au lieu de'intercepter les erreurs de la classe Exception, tu devrais être plus fin et préférer au minimum la classe EDataBaseError.

Personnellement, je pense que l'instruction "On Error Resume Next" du VB est une erreur monumentale. En effet, quand il se produit une erreur, pourquoi vouloir continuer un traitement en laissant l'erreur se propager ?
<hr color="#008000">Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.

Merci cs_Delphiprog 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 121 internautes ce mois-ci

Commenter la réponse de cs_Delphiprog
codial 270 Messages postés mercredi 14 avril 2004Date d'inscription 5 mai 2015 Dernière intervention - 4 févr. 2006 à 12:42
0
Merci
Bonjour,
merci pour cette aide car je ne trouvais vraiment pas la solution. Pour etre franc je ne saisi pas encore la différence ente les classes exception et EDataBaseError, mais je vais y arriver!!!

Venant du VB, pour ce qui concerne l'instruction "On Error Resume Next" du VB personnellement je la trouve bien pratique!!!

Cordialement

Codial
Commenter la réponse de codial
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 4 févr. 2006 à 14:05
0
Merci
Pratique, certes, mais dangereuse quand même.

Au sujet de l'interception des diférentes classes d'exceptions : la classe Exception est la classe mère de toutes les exceptions. En interceptant des erreurs de ce type, tu interceptes tout type d'exception y compris celles qui n'ont aucun rapport avec le problème lié aux bases de données.
En restreignant l'interception au type EDataBaseError, tu pourras appliquer un traitement plus approprié en étant sur que l'erreur s'est produite dans l'ensemble de données.
Si tu souhaites traiter à la fois les exceptions EDataBaseError et Exception, surtout commence par traiter le type d'exception de plus haut niveau comme ceci :
except
on E:EDataBaseError do ...

on E: Exception do ...
end;
Si tu inverses l'ordre de traitement dans le code ci-dessus, jamais tu ne traiteras les exceptions de la classe EDataBaseError.
Si tu n'as pas eu la chance d'avoir le poster de la hiérarchie VCL avec Delphi, voici un lien utile.
<hr color="#008000">Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Commenter la réponse de cs_Delphiprog
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 4 févr. 2006 à 14:18
0
Merci
Plus récent, le poster pour Delphi 7 (le lien précédent est pour celui des composants livrés avec Delphi 5).

<hr color="#008000">Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Commenter la réponse de cs_Delphiprog

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.