Page 1 sur 2
Problème avec une boucle while wend
Publié : jeu. 06/avr./2006 12:18
par wolfjeremy
Salut,
Voila, cette boucle ne marche pas, elle me renvoye stop a chaque fois ! alors qu'elle devrais m'envoyer une fois id_dom = 1 et une fois id_dom = 2 puis ensuite stop....
Pouvez vous me dire où est le problème ?
While stop = 1
If SQL$ = "SELECT id, domaine, extension, activ, date, expiration FROM domaine WHERE numero = '" + numero + "' AND id <> '" +id_dom.s+ "'" = 1
If CallFunctionFast (real_query, dbHnd, SQL$, Len (SQL$))
GetError(dbHnd)
Else
*mysqlResult= CallFunctionFast (store_result,dbHnd)
If *mysqlResult=0
If CallFunctionFast (field_count,dbHnd)
GetError(dbHnd)
Else
EndIf
Else
affRows = CallFunctionFast (affected_rows,dbHnd)
*mysqlRow= CallFunctionFast (fetch_row,*mysqlResult)
*mysqlLen= CallFunctionFast (fetch_lengths,*mysqlResult)
length= PeekL (*mysqlLen+4*(0))
fieldptr= PeekL (*mysqlRow+4*(0))
If fieldptr>0
id_dom.s= PeekS (fieldptr,length)
Debug id_dom
EndIf
EndIf
EndIf
Else
Debug "stop"
stop = 1
EndIf
Wend
Merci d'avance pour votre aide.
Publié : jeu. 06/avr./2006 12:46
par flaith
avant la boucle tu as définis ta variable "stop" à 1 ?
Publié : jeu. 06/avr./2006 13:14
par wolfjeremy
Non j'ai mis ma variable stop a 0... si je la met a 1 sa marquera stop lol
Publié : jeu. 06/avr./2006 14:15
par Good07
Bonjour Wolfjeremy.
Je n'ai pas pu faire fonctionner ton code Because plein d'erreurs.
Je me demande comment tu arrives a te retrouver dans cette imbrication de if et endif sans faire d'indentation.
De toute manière, je trouve 4 If et 5 Endif ce qui pourrai expliquer que ça ne marche pas.
Publié : jeu. 06/avr./2006 14:27
par wolfjeremy
Il y a bien le meme nombre de if et endif je vien de les reconter

sinon j'aurai eu une erreur, la j'ai pas d'erreur ! (PB4 beta 9) et en même temp je ne vois pas comment tu ferai fonctioner mon code vu que tu na pas la meme base de donnée que moi...
Sans la boucle sa marche, avec la boucle sa marche pas...
Publié : jeu. 06/avr./2006 14:45
par flaith
et comme ca c'est plus clair ?
Code : Tout sélectionner
stop = 1
a = 0
While stop = 1
If a > 10
stop = 0
Else
a+1
EndIf
Debug "stop = "+Str(stop)
Wend

Publié : jeu. 06/avr./2006 18:36
par wolfjeremy
je capte pas trop se que tu veu dire par là, mais j'ai esseyer de mettre le code plus ou moin comme tu le monde dans ton exemple et sa change rien...

Publié : jeu. 06/avr./2006 19:15
par flaith
Bref, de toute facon je comprends pas comment avoir un résultat quand tu mets
Code : Tout sélectionner
If SQL$ = "SELECT id, domaine, extension, activ, date, expiration FROM domaine WHERE numero = '" + numero + "' AND id <> '" +id_dom.s+ "'" = 1
cela revient à indiquer : si SQL$ = 1 ??? ca marche pas !!!

Publié : jeu. 06/avr./2006 19:17
par wolfjeremy
? lol
En faite j'ai plusieur champ dans ma table avec le même nom d'utilisateur ! donc se que je voudrais c'est recuperer la premiere ligne qui correspond a cet utilisateur ( id, domaine, extension, activ, date, expiration ) et ensuite chercher si il y en a des autres avec le meme nom d'utilisateur (a nouveau id, domaine, extension, activ, date, expiration )... si tu a une idée meilleur que la mienne dit le moi.
Publié : jeu. 06/avr./2006 19:20
par Good07

Il faut que j'arrête la boisson. Effectivement il y en a le même nombre.
Mais il n'en reste pas moins que je pense que le problème peut venir d'une mauvaise imbrication de tes if et endif. Le programme doit sauter directement à la fin car aucune condition n'est remplie. donc le dernier else est exécuté et donne stop=1.
L'exemple donné par flaith est parfait et devrait te donner la réponse. Dans ton programme la boucle est infini puisque stop est toujours égal à 1.
Juste après stop=1, tu mets par exemple b=b+1,puis sur la ligne suivante Debug b et tu devrais voir b s'incrémenter sans arrêt.
Si c'est le cas, ça prouve que ta boucle tourne, mais qu'aucune condition ne fonctionne.
Publié : jeu. 06/avr./2006 19:27
par wolfjeremy

vais tout recommencer on vera bien... sans la boucle sa marchait pourtant pour recuperer une ligne...
Publié : jeu. 06/avr./2006 19:30
par flaith
un embrion de ce que tu dois avoir (enfin peut-être) :
Code : Tout sélectionner
stop = 1
SQL$ = "SELECT id, domaine, extension, activ, date, expiration FROM domaine WHERE numero = '" + Str(numero) + "' AND id <> '" +id_dom.s+ "'"
While stop = 1
If CallFunctionFast (real_query, dbHnd, SQL$, Len (SQL$)) > 0 ; = 1 ?
*mysqlResult= CallFunctionFast (store_result,dbHnd)
If *mysqlResult=0
If CallFunctionFast (field_count,dbHnd) = 0
GetError(dbHnd)
stop = 0
Debug "stop"
EndIf
Else
affRows = CallFunctionFast (affected_rows,dbHnd)
*mysqlRow= CallFunctionFast (fetch_row,*mysqlResult)
*mysqlLen= CallFunctionFast (fetch_lengths,*mysqlResult)
length= PeekL (*mysqlLen+4*(0))
fieldptr= PeekL (*mysqlRow+4*(0))
If fieldptr>0
id_dom.s= PeekS (fieldptr,length)
Debug id_dom
EndIf
EndIf
Else
GetError(dbHnd)
stop = 0
Debug "stop"
EndIf
Wend
je ne sais pas quels sont les valeurs retournées par l'appel des fonctions (si < ou > à 0, etc...)
mais si ca peut aider

Publié : jeu. 06/avr./2006 19:33
par wolfjeremy
Nan mais sa fallait déjà pas le changer :
If SQL$ = "SELECT id, domaine, extension, activ, date, expiration FROM domaine WHERE numero = '" + numero + "' AND id <> '" +id_dom.s+ "'" = 1
If CallFunctionFast (real_query, dbHnd, SQL$, Len (SQL$))
GetError(dbHnd)
Else
C'était bon LOL
Citation :
real_query renvoie 0 QUAND ELLE MARCHE et des infos QUAND ELLE NE MARCHE PAS
C'est Poshu qui la dit et c'est bien vrai vu que c'est lui qui ma passer mon code de base et qu'il marche

Publié : jeu. 06/avr./2006 19:42
par wolfjeremy
ton code modifier pour qu'il soit juste (les erreur que tu avait fai en metant >0 ou =0 alors qu'il ne faut rien mettre, et l'erreur avec val(numero) qui est un string et qui doit le rester) il m'affiche stop et c'est tout...
SQL$ = "SELECT id, domaine, extension, activ, date, expiration FROM domaine WHERE numero = '" + numero + "' AND id <> '" +id_dom+ "'"
While stop = 1
If CallFunctionFast (real_query, dbHnd, SQL$, Len (SQL$))
*mysqlResult= CallFunctionFast (store_result,dbHnd)
If *mysqlResult=0
If CallFunctionFast (field_count,dbHnd)
GetError(dbHnd)
stop = 0
Debug "stop"
EndIf
Else
affRows = CallFunctionFast (affected_rows,dbHnd)
*mysqlRow= CallFunctionFast (fetch_row,*mysqlResult)
*mysqlLen= CallFunctionFast (fetch_lengths,*mysqlResult)
length= PeekL (*mysqlLen+4*(0))
fieldptr= PeekL (*mysqlRow+4*(0))
If fieldptr>0
id_dom.s= PeekS (fieldptr,length)
Debug id_dom
EndIf
EndIf
Else
GetError(dbHnd)
stop = 0
Debug "stop"
EndIf
Wend
En plus je ne comprend pas comment tu veu recuperer plusieur ligne de table la dedans ? (ce que j'appel ligne de table c'est une ligne complete dans mysql enfin tu me comprend)
Car tu fait la requete sql avant la boucle

Publié : jeu. 06/avr./2006 19:53
par flaith
ok, alors en mettant dans la boucle
Code : Tout sélectionner
numero.s = "" ;ton numéro
id_dom.s = "" ;ton id
stop = 1
While stop = 1
SQL$ = "SELECT id, domaine, extension, activ, date, expiration FROM domaine WHERE numero = '"+numero+"' AND id <> '"+id_dom+"'"
If CallFunctionFast (real_query, dbHnd, SQL$, Len (SQL$))
*mysqlResult= CallFunctionFast (store_result,dbHnd)
If *mysqlResult=0
If CallFunctionFast (field_count,dbHnd)
GetError(dbHnd)
stop = 0
Debug "stop"
EndIf
Else
affRows = CallFunctionFast (affected_rows,dbHnd)
*mysqlRow = CallFunctionFast (fetch_row,*mysqlResult)
*mysqlLen = CallFunctionFast (fetch_lengths,*mysqlResult)
length = PeekL (*mysqlLen+4*(0)) ; Recupe de mysqlLen(4) * 0 = 0 non ???
fieldptr = PeekL (*mysqlRow+4*(0)) ; idem
If fieldptr > 0
id_dom = PeekS (fieldptr,length)
Debug id_dom
EndIf
EndIf
Else
GetError(dbHnd)
stop = 0
Debug "stop"
EndIf
Wend
par contre length et fieldptr sont tjrs égaux à 0 !!!