IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP Discussion :

erreur LOOP attendu , mais pourquoi?


Sujet :

ASP

  1. #1
    Membre actif Avatar de ahage4x4
    Inscrit en
    Janvier 2005
    Messages
    318
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 318
    Points : 238
    Points
    238
    Par défaut erreur LOOP attendu , mais pourquoi?
    Bonjour a tous,
    Je galère pour trouver la raison d'une erreur.
    Je cherche a creer dynamiquement une zone de liste de pays, j'arrive a le faire sans probleme, cette liste se remplit grace a une requete.
    Maintenant je veux remplir cette liste de la meme requete, mais je veux que si la valeur qui va etre remplie se trouve dans une autre requete qu'elle se met en "selected" cad pre-choisie dans cette zone.
    Voila le code il est assez simple, je vous prie de jeter un coup d'oeil:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <%  
    			''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    			'Dessine une zone de liste dynamiquement a partir de la requete listepays'
    			''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    		  response.write("<select name=selectPAYS multiple size=5 >")
     
    		  do until RSpays.EOF
    		  signal = false
     
        	' Si la liste n'est pas vide
    		  if not isNull(RS3(0))  then
    		  do until RS3.EOF
    		  if  RSpays(1)=RS3(1) then 
    		  'Si le code ds RSpays se trouve ds la liste RS3  mettre en selected
    		  signal = true
     
    		  end if
    		  RS3.MoveNext
    		  Loop
    		  end if
    		  if signal = true then response.write("<OPTION  VALUE=RSpays(1) selected>" & RSpays(0) & "</OPTION>" )
    		 else response.write("<OPTION  VALUE=RSpays(1) >" & RSpays(0) & "</OPTION>")
    		  end if
    		  	  RSpays.MoveNext
    		  Loop
     
    		  response.write("</select>")
    J'ai cette erreur sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     else response.write("<OPTION  VALUE=RSpays(1) >" & RSpays(0) & "</OPTION>")
    LOOP attendu

    J'ai 2 boucles do until et il y a 2 loop là ou il faut.
    Voila mon probleme.
    Merci d'avance

  2. #2
    Membre actif Avatar de ahage4x4
    Inscrit en
    Janvier 2005
    Messages
    318
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 318
    Points : 238
    Points
    238
    Par défaut

  3. #3
    Membre actif Avatar de ahage4x4
    Inscrit en
    Janvier 2005
    Messages
    318
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 318
    Points : 238
    Points
    238
    Par défaut


    Personne ne peut m'aider?

  4. #4
    LEK
    LEK est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    715
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 715
    Points : 470
    Points
    470
    Par défaut
    ta base c'est sql server?

  5. #5
    Membre actif Avatar de ahage4x4
    Inscrit en
    Janvier 2005
    Messages
    318
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 318
    Points : 238
    Points
    238
    Par défaut
    Citation Envoyé par LEK
    ta base c'est sql server?
    C'est une base access en fait.


  6. #6
    LEK
    LEK est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    715
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 715
    Points : 470
    Points
    470
    Par défaut
    Ce qu'il faudrait c'est que tu réécrives ton code plus clairement. Tu as Access alors tu ne peux sûrment pas faire de requêtes imbriqués avec un opérateur in...
    Il te reste deux solutions faire :
    - comme tu l'as déjà fais mais de manière plus souple une nouvelle requête pour chaque pays de ta liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    set rspays = Conn.Execute("select id_pays,pays from pays order by 2")
    while not rspays.EOF
     
      set rs3 = con.execute("select id_pays from pays3 where id_pays='"& rspays("pays") &"'")
     
    if not rs3.eof then 
     b_sel = " selected "
    else
     b_sel = ""
    end if
     
     response.write "<option value='"&rspays("id_pays")&"' "&b_sel&"> "& rspays("pays") &"</option>"
       rspays.MoveNext
    wend
    set rspays = nothing
    set rs3 = nothing
    Voilà qui te permettra d'éviter les lourdeurs de boucles loop sans do...

    Tu pourrais éventuellement avoir une solution plus souple au point de vue rendement avec une seule requête avec jointure externe mais je ne pratique pas vraiment access et ne connais pas exactment la syntaxe ni le contenu de tes deux requêtes ......

    voilà j'espère que ça t'aidera

  7. #7
    Membre actif Avatar de ahage4x4
    Inscrit en
    Janvier 2005
    Messages
    318
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 318
    Points : 238
    Points
    238
    Par défaut
    Citation Envoyé par LEK
    Ce qu'il faudrait c'est que tu réécrives ton code plus clairement. Tu as Access alors tu ne peux sûrment pas faire de requêtes imbriqués avec un opérateur in...
    Il te reste deux solutions faire :
    - comme tu l'as déjà fais mais de manière plus souple une nouvelle requête pour chaque pays de ta liste :


    Voilà qui te permettra d'éviter les lourdeurs de boucles loop sans do...

    Tu pourrais éventuellement avoir une solution plus souple au point de vue rendement avec une seule requête avec jointure externe mais je ne pratique pas vraiment access et ne connais pas exactment la syntaxe ni le contenu de tes deux requêtes ......

    voilà j'espère que ça t'aidera
    Lek je te remercie bcp, je peux pas essayer avant lundi, mais concernant les requetes imbriqués avec IN ca marche avec ACCESS, j'ai deja essayé et ca marche bien.
    Je te tiens au courant, merci pour ton aide.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 166
    Points : 189
    Points
    189
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tu pourrais éventuellement avoir une solution plus souple au point de vue rendement avec une seule requête avec jointure externe mais je ne pratique pas vraiment access et ne connais pas exactment la syntaxe ni le contenu de tes deux requêtes ......
    ça serait effectivement la meilleure solution à mon sens.
    Dans l'idée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    sql = "SELECT PaysNom,PaysCode,Pays3.PaysCode as Payscode3 From Pays Left JOIN (select .....from pays....) as Pays3 ON Pays.PaysCode=Pays3.PaysCode"
    rs.open conn,sql......
    Puis en un tour du boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    while not rs.eof
    %>
    <option value="<%=rs("PaysCode")%>" <%if rs("PaysCode3")&""<>"" then response.write(" ""selected""")%> > <%=rs("PaysNom")%>
    <%
    rs.movenext
    wend

  9. #9
    LEK
    LEK est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    715
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 715
    Points : 470
    Points
    470
    Par défaut
    Tu lis dans mes pensées amar00 En fait la syntaxe ne diffère pas vraiment de celle sous oracle ou sql server, j'aurais pu pondre à quelquechose près ton code...
    Bonne démonstration

  10. #10
    Membre actif Avatar de ahage4x4
    Inscrit en
    Janvier 2005
    Messages
    318
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 318
    Points : 238
    Points
    238
    Par défaut
    Bonjour a tous,
    J'ai fini avec le problème, j'ai gardé mon algorithme sachant qu'il est plus lourd que ce que vous m'avez proposé, mais comme j'ai passé pas mal de temps dessus, j'ai pas voulu changer la douzaine de requetes , je repete l'algo de creation des zone une dizaine de fois donc bref...

    Je poste mon code au cas ou ca interesse quelqu'un. Je tiens a vous remercier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    <%  
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    '''''''''''''Dessine une zone de liste dynamiquement a partir de la requete listepays'''''''''''
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    		  response.write("<select multiple name=selectPAYS  size=5 style='width:100 px'>")
     
     
     
     
    			 		'Pour chaque pays de la liste s'il appartient a la requete sql3 on le met en selected	
    			'S'assurer que RS3 n'est pas vide avant de continuer, si vide faire autre algo
    		if not (RS3.EOF and RS3.BOF ) then
    			While not RSpays.EOF
    			  signal = false
     
     
    				    rs3.movefirst	
    					While not RS3.EOF
     
    						if  RSpays(1)=RS3(1) then 
    		   				'Si le code ds RSpays se trouve ds la liste RS3  mettre signal = true
    						signal = true
    		   				end if
    		  				RS3.MoveNext
    					  Wend
     
     
    				  if signal = true then 
    		  			response.write("<OPTION SELECTED VALUE=RSpays(1) >" & RSpays(0) & "</OPTION>" )
    		  			else  
    		   			response.write("<OPTION VALUE=RSpays(1)>" & RSpays(0) & "</OPTION>")
    		  		  end if
    		      RSpays.MoveNext
    		  Wend
    		 RS3.MoveFirst 'Necessaire pour la reutilisation de RS3
    		 else 
    		 	'Si aucun pays n'a ete indiqué, remplir par la liste des pays complete
    		 		While not RSpays.EOF
    			    response.write("<OPTION VALUE=RSpays(1)>" & RSpays(0) & "</OPTION>")
    		  	    RSpays.MoveNext
    		 		Wend
     
    		 end if
    		  response.write("</select>")
    Encore une question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if not (RS3.EOF and RS3.BOF) then
      do until RS3.EOF
        pays = pays + RS3(0)
        RS3.MoveNext
        if not RS3.EOF then
          pays = pays + ", "
        end if
      loop
      end if
    Est t il necessaire de faire if not avant le do until RS3.EOF pour s'assurer qu'on pointe pas a un Null?
    Merci !!!

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    367
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 367
    Points : 414
    Points
    414
    Par défaut
    Salut,

    la réponse est oui ! Il faut toujours s'assurer que le recordset contient des réponses à la question, et par la meme occasion, avec le else tu peux gérer le cas ou il n'y pas d'enrengistrements en réponse au critére

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur d'application mais pourquoi ?
    Par Progmeur dans le forum C++
    Réponses: 3
    Dernier message: 20/03/2013, 08h33
  2. Erreur de compilation : mais pourquoi?
    Par bertry dans le forum Langage
    Réponses: 4
    Dernier message: 29/01/2011, 21h55
  3. erreur, mais pourquoi ?
    Par GrosB dans le forum Langage
    Réponses: 5
    Dernier message: 01/08/2006, 19h25
  4. Réponses: 4
    Dernier message: 28/03/2006, 22h52
  5. Une erreur sur le free.. Oui mais pourquoi ?
    Par MonsieurAk dans le forum C
    Réponses: 7
    Dernier message: 22/12/2005, 20h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo