Passser outre une erreur dans delphi

Résolu
codial Messages postés 265 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 5 mai 2015 - 4 févr. 2006 à 10:58
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 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

4 réponses

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
4 févr. 2006 à 11:55
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.
3
codial Messages postés 265 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 5 mai 2015 1
4 févr. 2006 à 12:42
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
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
4 févr. 2006 à 14:05
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.
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
4 févr. 2006 à 14:18
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.
0
Rejoignez-nous