Boucle While do sans fin

Résolu
Signaler
Messages postés
265
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
5 mai 2015
-
Messages postés
265
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
5 mai 2015
-
Bonjour à tous,

je vous soumets un bout de code car j'ai un problème compréhension et je galère. En effet la boucle en rouge et gras quand elle arrive au dernier enregistrement, elle devient sans fin et si je rajoute à la ligne while D1.tbl_res.fieldbyname('Code_Comp').asstring = lCode or not D1.tbl_res.Eof j'ai un message d'erreur; Type incompatible "String et Boolean".

while not D1.tbl_res.Eof do
begin
lCode: =D1.tbl_res.fieldbyname('Code_Comp').asstring;
StringsValides:=0;
Min:=0;
Sec:=0;
cent:=0;
while D1.tbl_res.fieldbyname('Code_Comp').asstring = lCode do
begin
inc(StringsValides);
STmp:=D1.tbl_res.fieldbyname('CO_Tp').asstring;
Min:=Min + StrToInt(Copy(STmp, 1, Pos(':', STmp) -1));
Delete(STmp, 1, Pos(':', STmp));
Sec:=Sec+StrToInt(Copy(STmp, 1, Pos(':', STmp) -1));
Delete(STmp, 1, Pos(':', STmp));
Cent := Cent + StrToInt(STmp);
D1.tbl_res.next; ==============> Boucle sans fin sur le dernier enregistrement ????
end;
Cent := Cent + Sec * 100 + Min * 6000;
Cent := Cent div StringsValides;
Sec := Cent div 100;
Cent := Cent mod 100;
Min := Sec div 60;
Sec := Sec mod 60;
// Enregistrement des moyenne
D1.tbl_Myn.insert;
D1.tbl_Myn.FieldByName('Code_Comp').asstring:= lCode;
D1.tbl_Myn.FieldByName('CO_Moyenne').asstring:=Format('%.1d:%.2d:%.2d', [Min, Sec, Cent]); //lblTemp;
D1.tbl_Myn.Post;
end;
showmessage('Mise à jour terminée.');

d'avance merci

Codial

6 réponses

Messages postés
309
Date d'inscription
jeudi 6 juin 2002
Statut
Membre
Dernière intervention
24 septembre 2008
2
Je n'ai pas regardé tout ton code, mais il me semble que ton problème viens en fait que tu ne puisses pas mettre cette ligne : while D1.tbl_res.fieldbyname('Code_Comp').asstring = lCode or not D1.tbl_res.Eof

en fait pour ne pas avoir ton erreur de compilation il faut écrire :

while ( D1.tbl_res.fieldbyname('Code_Comp').asstring = lCode) or not D1.tbl_res.Eof do

Et la ton code compilera correctement...

Bonne Prog,

Olivier

PS : Lorsqu'une réponse vous convient, n'oubliez pas de la valider.
Messages postés
163
Date d'inscription
dimanche 20 octobre 2002
Statut
Membre
Dernière intervention
31 juillet 2008

vi j'suis d'accord faut entourer ton OR avec parentheses, faut croire que le OR soit prioritaire au =...

et qd tu tapes : a=b or c=d , il fait peut etre a= (b or c) =d et
du coup il compare une string avec boolean....enfin peut etre... ;o)

exyacc
Messages postés
265
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
5 mai 2015
1
Bonsoir et merci pour les réponses:

En fait je me plantais lamentablement la bonne syntaxe c'est And au lieu de Or

while D1.tbl_res.fieldbyname('Code_Comp').asstring = lCode and not D1.tbl_res.Eof do

Cordialement

Codial
Messages postés
265
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
5 mai 2015
1
Re bonsoir:

Précision vos remarques sont justes car si j'enlève les parenthèses j'ai le message d'erreur: Type incompatible "String et Boolean".

Encore merci de me libérer de cette prise de tête !!!

Cordialement
Messages postés
163
Date d'inscription
dimanche 20 octobre 2002
Statut
Membre
Dernière intervention
31 juillet 2008

de toute facon, des que tu mets des AND ou OR, mets des parentheses,
car la t'as de la "chance" car tes donnees sont pas compatibles
(boolean et string) donc t'as eu une erreur...mais le pire c'est qd y'a
pas d'erreur de compilation et que ca merde dans les resultats
justement a cause du manque des parentheses...je dis ca par vecu.......
;o).

exyacc
Messages postés
265
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
5 mai 2015
1
Bonjour,

merci beaucoup du conseil j'en tiendrait compte. Venant du VB je débute avec Delphi aussi je perds beaucoup de temps sur ce genre de syntaxe.

Encore merci. Cordialement.

Codial