Boucle While do sans fin [Résolu]

codial 270 Messages postés mercredi 14 avril 2004Date d'inscription 5 mai 2015 Dernière intervention - 2 juin 2005 à 13:09 - Dernière réponse : codial 270 Messages postés mercredi 14 avril 2004Date d'inscription 5 mai 2015 Dernière intervention
- 3 juin 2005 à 05:30
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
Afficher la suite 

6 réponses

Répondre au sujet
Loulibier 323 Messages postés jeudi 6 juin 2002Date d'inscription 24 septembre 2008 Dernière intervention - 2 juin 2005 à 13:56
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Loulibier
exyacc 163 Messages postés dimanche 20 octobre 2002Date d'inscription 31 juillet 2008 Dernière intervention - 2 juin 2005 à 17:01
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de exyacc
codial 270 Messages postés mercredi 14 avril 2004Date d'inscription 5 mai 2015 Dernière intervention - 2 juin 2005 à 18:28
0
Utile
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
Commenter la réponse de codial
codial 270 Messages postés mercredi 14 avril 2004Date d'inscription 5 mai 2015 Dernière intervention - 2 juin 2005 à 18:35
0
Utile
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
Commenter la réponse de codial
exyacc 163 Messages postés dimanche 20 octobre 2002Date d'inscription 31 juillet 2008 Dernière intervention - 2 juin 2005 à 18:46
0
Utile
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
Commenter la réponse de exyacc
codial 270 Messages postés mercredi 14 avril 2004Date d'inscription 5 mai 2015 Dernière intervention - 3 juin 2005 à 05:30
0
Utile
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
Commenter la réponse de codial

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.