Forum de discussion
Forum « Programmation ASP » (archives)
Re: problème pour afficher le resultat d'une requête
Envoyé: 1er octobre 2004, 7h38 par Oznog
Je recopie ici ton message perdu hier lors de manipulation côté serveur. Note que tu ne doit pas créer un nouveau sujet pour essentiellement le même problème.
DATE : 1/10/2004 5:40:36 AM
AUTEUR: petitepunk
TITRE : probleme d'affichage d'un tableau a partir d'une base
--------------------
Je poste un nouveau message car cette fois ci le plus gros du travail fonctionne, il ne me reste plus qu'à afficher mon tableau a double entrée(les contacts sont classés par magasin).
Donc j'ai 2 tables (contact et magasin) et une troisieme qui sert de relation (contact_mag)entre ces 2 tables et qui est composées des ID de chaqu'une des 2 tables.
Mon tableau doit être comme ceci:
NOM......MAIL....TEL.....PORTABLE
MAGASIN 1
NOM......@mail....tel....MOBILE
NOM2.....@mail....tel....MOBILE
...
MAGASIN 2
NOM3.....@mail....tel....MOBILE
..
J'ai donc ecris le code suivant:
sql="SELECT contact.contact_id, contact.contact_nom, contact.messagerie, contact.tel_local, contact.tel_fixe, contact.tel_mobile, contact_mag.mag_id, magasin.mag_nom
FROM magasin
INNER JOIN (contact INNER JOIN contact_mag ON contact.contact_id = contact_mag.contact_id)
ON magasin.mag_id = contact_mag.mag_id"
rs.Open sql, objConnexion
....
if rs.eof = false then
rs.MoveFirst
DO WHILE not rs.eof
DO UNTIL "mag_id" <> NULL
%><tr>
<td><%=rs("mag_nom")%></td>
<%DO UNTIL "sql "= TRUE%>
<td><B><%=rs("contact_nom")%>
</B></td>
<td><a href="mailto:<%=rs("messagerie")%>@ubaldi.mail"><%=rs("messagerie")%>@ubaldi.mail</a></td>
<td><%=rs("tel_local")%></td>
<td><%=rs("tel_fixe")%></td>
<td><%=rs("tel_mobile")%></td>
</tr>
<%rs.MoveNext
loop
loop
Loop
end if
%>
Voici l'erreur qu'il m'affiche et je ne vois pas comment afficher mon tableau autrement:
BOF ou EOF est égal à True ou l'enregistrement actuel a été supprimé. L'opération demandée nécessite un enregistrement actuel.
aucune ligne d'erreur n'est indiqué.
Quelqu'un a t il deja eu cette erreur?
--------------
Tu boucle à l'extérieur du jeu de résultat (recordset) BOF = bottom of file et EOF = End of file. Un peu comme à l'extérieur d'une matrice (array). Bien sûr impossible et ça provoque une erreur.
Pour t'assurer de ne pas sortir des limites du recordset tu ne dois pas faire de test avec une variable abstrait. Mais dans ton cas c'est encore pire parceque tu mélange TROIS boucles! La seule de bonne est la première (DO WHILE not rs.eof) mais tu ne la gère pas, en fait elle ne sert à rien.
' Très très mauvais
DO WHILE not rs.eof
DO UNTIL "mag_id" <> NULL
DO UNTIL "sql "= TRUE
...
rs.MoveNext
loop
loop
loop
' Bonne façon
' Très très mauvais
DO WHILE not rs.eof
DO UNTIL "mag_id" <> NULL
DO UNTIL "sql "= TRUE
...
loop
loop
rs.MoveNext
loop
Bon, à première vue je pense que tu dois remplacer les deux boucle à l'intérieur par de simple test de condition.
if "mag_id" <> NULL then...
et
if "sql "= TRUE then...
Etc.
En fait il doit y avoir qu'une seule boucle (WHILE) PAR recordset. Et le movenext doit IMPÉRATIVEMENT être associé à cette boucle si tu ne veux pas revoir cette erreur.
En gros tu fait
Boucle tant et aussi longtemps que tu n'est pas à la fin du fichier (EOF)
... traitement sur le record ...
passe au record suivant
Fin de la boucle et donc remonte en haut, et s,il n,y a pas de record la condition n'est plus bonne et on sort de cette boucle.
Ciao
Oznog
Réponses
|