Problème avec une boucle while wend

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Problème avec une boucle while wend

Message 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.
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message par flaith »

avant la boucle tu as définis ta variable "stop" à 1 ?
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

Non j'ai mis ma variable stop a 0... si je la met a 1 sa marquera stop lol
Good07
Messages : 308
Inscription : ven. 23/avr./2004 18:08
Localisation : Hérault 34190 Laroque

Message 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.
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message 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...
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message 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:
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message 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:
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message 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 !!! :?
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message 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.
Good07
Messages : 308
Inscription : ven. 23/avr./2004 18:08
Localisation : Hérault 34190 Laroque

Message 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.
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

:drinking: vais tout recommencer on vera bien... sans la boucle sa marchait pourtant pour recuperer une ligne...
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message 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:
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message 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:
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message 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 :?
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message 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 !!!
Répondre