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. 8O
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 :wink: 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 
:wink:

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... :cry:

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
:oops: 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
:drinking: 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 :wink:

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 :wink:

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 !!!