codial
Messages postés265Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention 5 mai 2015
-
4 févr. 2006 à 10:58
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDerniè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;
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 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.
codial
Messages postés265Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention 5 mai 20151 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!!!
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 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.