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 :

probleme de recordset dans une boucle do while


Sujet :

ASP

  1. #1
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 47
    Points : 41
    Points
    41
    Par défaut probleme de recordset dans une boucle do while
    bonjour tout le monde
    je suis débutant en asp et voici mon problème:

    ma page asp affiche les resultats d'une requête d'une base access

    voici ce que la requête affiche:
    name_surname----country_nation----last_occupation---last_project----period-----site----position_english---company
    DUPOND_CHARLES----PARIS--------WELDER---------PROJECT X--------2002--------BRUXELLES-----WELDER---COMPANY X
    DUPOND_CHARLES----PARIS--------WELDER---------PROJECT X--------1997--------STRASBOURG----WELDER---COMPANY X
    DUPONT_PIERRE-----COLOMBIE-----SUPERVISOR-----PROJECT Y--------2004--------MARSEILLE-----WELDER---COMPANY X
    DUPONT_PIERRE-----COLOMBIE-----SUPERVISOR-----PROJECT Y--------2001--------TOULOUSE------WELDER---COMPANY X
    DUPONT_PIERRE-----COLOMBIE-----SUPERVISOR-----PROJECT Y--------1998--------DUNKERQUE-----WELDER---COMPANY X
    la requete affiche les experiences des personnes
    dupond charles a 2 experience
    dupont pierre a 3 experience

    la requete s'appelle BASE_EXPERIENCE2
    et la base de données DATABASE FREELANCE

    maintenant voici le code asp que j'utilise pour afficher les resultats de la requete:

    je me connecte a la base a l'aide d'un recordset:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <%
    DSN_BASE = "DBQ=" & Server.Mappath("DATABASE FREELANCE.mdb")& ";Driver={Microsoft Access Driver (*.mdb)};DriverId=25"
    Set ConnAffiche = Server.CreateObject("ADODB.Connection")
    ConnAffiche.Open DSN_BASE
    Set rsAffiche = Server.CreateObject("ADODB.Recordset")
    Selection = "Select * from [BASE_EXPERIENCE2] where ([name_surname] like '"&name2&"' and [last_occupation] like '"&fonction2&"' and [last_project] like '"&project2&"') order by [name_surname]"
    rsAffiche.Open selection , ConnAffiche
    %>
    name, fonction et project sont des variables récupérées avec le method post de la page précedente

    j'affiche les resultats:
    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
     
    <%if rsaffiche.eof = false then rsAffiche.MoveFirst%>
    <%DO WHILE not rsAffiche.eof%>
     
    rsAffiche("name_surname")
    rsAffiche("country_nation")
    rsAffiche("last_occupation")
    rsAffiche("last_project")
     
    rsAffiche("period")
     
    rsAffiche("site")
     
    rsAffiche("position_english")
     
    rsAffiche("company")
     
    <%rsAffiche.MoveNext
    loop%>
    (normalement il y a du html mais pour vous simplifier j'ai mis que le code important)

    name_surname, country_nation, last_occupation et last_project sont les informations de la personnes

    period site position_english et company sont les informations de l'experience

    donc ca m'affiche bien:
    DUPOND_CHARLES----PARIS--------WELDER---------PROJECT X--------2002--------BRUXELLES-----WELDER---COMPANY X
    DUPOND_CHARLES----PARIS--------WELDER---------PROJECT X--------1997--------STRASBOURG----WELDER---COMPANY X
    DUPONT_PIERRE-----COLOMBIE-----SUPERVISOR-----PROJECT Y--------2004--------MARSEILLE-----WELDER---COMPANY X
    DUPONT_PIERRE-----COLOMBIE-----SUPERVISOR-----PROJECT Y--------2001--------TOULOUSE------WELDER---COMPANY X
    DUPONT_PIERRE-----COLOMBIE-----SUPERVISOR-----PROJECT Y--------1998--------DUNKERQUE-----WELDER---COMPANY X
    mais comment faire pour afficher
    DUPOND_CHARLES----PARIS--------WELDER---------PROJECT X--------2002--------BRUXELLES-----WELDER---COMPANY X
    --------------------------------------------------------------------------------1997--------STRASBOURG----WELDER---COMPANY X
    DUPONT_PIERRE-----COLOMBIE-----SUPERVISOR-----PROJECT Y--------2004--------MARSEILLE-----WELDER---COMPANY X
    -----------------------------------------------------------------------------------2001--------TOULOUSE------WELDER---COMPANY X
    ----------------------------------------------------------------------------------1998--------DUNKERQUE-----WELDER---COMPANY X
    c'est a dire n'afficher qu'une fois les informations relatives a la personnes mais toutes les experiences
    je sais pas si c'est au niveau du recordset ou de la boucle do while qu'il faut que je change un truc
    les requetes sont bonnes apparement...

    merci de votre aide ^^

  2. #2
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 47
    Points : 41
    Points
    41
    Par défaut
    je me suis trompé de forum
    je croyais etre dans le forum asp
    quelqu'un peut le déplacer s'il vous plait?
    merci

    [Drosera : et hop !]

  3. #3
    Inactif
    Inscrit en
    Juillet 2002
    Messages
    315
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 315
    Points : 353
    Points
    353
    Par défaut
    moi je ferais :
    1/ une requête pour récupérer les noms
    2/ tu boucles sur cette requête pour faire l'affichage des infos sur les personnes
    3/ pour chaque élément tu fais une seconde requête pour récupérer les infos "expérience"
    4/ tu boucles sur cette requête pour faire l'affichage des expériences

  4. #4
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 47
    Points : 41
    Points
    41
    Par défaut
    ok merci c'est ce que je suis en train de faire
    mais j'ai un problème dans la boucle:

    j'essaye un truc comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <%if rsaffiche.eof = false then rsAffiche.MoveFirst%>
    <%DO WHILE not rsAffiche.eof%>
    <%=rsAffiche("name_surname")%>
     
    	<%if rsaffiche2.eof = false then rsAffiche2.movefirst%>
    	<%DO WHILE not rsaffiche2.eof%>
    	<%=rsAffiche2("experience")%>
    	<%rsaffiche2.movenext%>
    	<%loop%>
     
    <%rsAffiche.MoveNext
    loop%>
    mais comme ma requete 3/ pour recuperer les infos n'a pas l'air bonne ca m'affiche de mauvais resultats

    faut il bien faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql = "select * from requete2 where name_surname='"&rsAffiche.Fields(0)&"'"
    ?
    rsAffiche.fields(0) correspondant au 1er recordset et au champ name_surname de la requete qui recupere les noms

    comment dois-je faire ma boucle? si je veux recuperer les info experience pour chaque nom, il doit bien y avoir une boucle dans une autre non? (voir en haut)

    merci de votre aide ^^

  5. #5
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 99
    Points : 118
    Points
    118
    Par défaut
    il doit resembler a ça en gros
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <%DO WHILE not rsAffiche.eof%> 
    <%=rsAffiche("name_surname")%> 
     
       <% selection2 ="requete sql"
        rsAffiche2.Open selection2 , ConnAffiche %>
       <%DO WHILE not rsaffiche2.eof%> 
       <%=rsAffiche2("experience")%> 
       <%rsaffiche2.movenext%> 
       <%loop%> 
     
    <%rsAffiche.MoveNext 
    loop%>

  6. #6
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 47
    Points : 41
    Points
    41
    Par défaut
    je viens d'essayer mais j'obtiens
    cette erreur:
    Type d'erreur :
    ADODB.Recordset (0x800A0E79)
    Cette opération n'est pas autorisée si l'objet est ouvert.
    au niveau de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rsAffiche2.Open selection2 , ConnAffiche %>
    par contre quand je met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%Set rsAffiche2 = Server.CreateObject("ADODB.Recordset")%>
    a l'interieur
    ca rame trop puis ca me le fait qu'une fois pour la 1ere personne...

  7. #7
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 47
    Points : 41
    Points
    41
    Par défaut
    autant pour moi je viens de réessayer ca marche bien pour toutes les personnes ^^
    mais je dois encore filtrer avec la requete selection2
    j'essaye et je vous dis si ca marche...

  8. #8
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 47
    Points : 41
    Points
    41
    Par défaut
    voila
    j'essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE (((R2_EXPERIENCE.name_surname)='"&rsAffiche.Fields(0)&"'))
    mais ca veut pas marcher parce qu'il y a un nom avec un '
    O'CONNOR par exemple
    comment ca se passe au niveau des guillemets svp?

  9. #9
    Inactif
    Inscrit en
    Juillet 2002
    Messages
    315
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 315
    Points : 353
    Points
    353
    Par défaut
    il faut les doubler...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nom = Replace(nom, "'", "''", 1, -1, 1)

  10. #10
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 47
    Points : 41
    Points
    41
    Par défaut
    je dois faire ce replace sur le recordset mais je ne sais pas trop comment je vais m'y prendre

    il me faudrait un truc comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if il  y a un ' dans rsaffiche.fields(0) then
    rsaffiche.fields(0) = replace(rsaffiche.fields(0), "'","''",1,-1,1)
    endif
    mais sans que ca modifie les données réellement dans la table...
    je sais bien que ce code ne va pas marcher , c'est juste pour vous montrer ^^; mais je sais pas si on a un controle de ce genre sur un recordset

    merci de votre aide

  11. #11
    Inactif
    Inscrit en
    Juillet 2002
    Messages
    315
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 315
    Points : 353
    Points
    353
    Par défaut
    ben tu mets le contenu de ton champ de recordset dans un varaible et tu fais le replace dessus... et tu utilises cette variable dans la requête suivante

  12. #12
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 47
    Points : 41
    Points
    41
    Par défaut
    ok d'accord
    mais c'est quoi la fonction pour verifier l'existence d'un caractere dans une chaine?

  13. #13
    Inactif
    Inscrit en
    Juillet 2002
    Messages
    315
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 315
    Points : 353
    Points
    353

  14. #14
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 47
    Points : 41
    Points
    41
    Par défaut
    ahhh on peut utiliser toutes les fonctions du vbscript en asp alors?
    parce que je l'ai deja fait avec instr()
    j'essaye et je vous dit si ca marche ^^

    sinon ben merci pour la doc

  15. #15
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 47
    Points : 41
    Points
    41
    Par défaut
    ca y est ca marche
    merci beaucoup ^^

    voici le code que j'ai utilisé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <%
    fullname = rsAffiche.Fields(0)
    nb = len(fullname)
    	For i = 1 To nb
    		If (InStr(i, fullname, "'") <> 0) Then
    		fullname = Replace(fullname, "'", "''", 1, -1, 1)
    		End If
       Next
    %>

  16. #16
    Inactif
    Inscrit en
    Juillet 2002
    Messages
    315
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 315
    Points : 353
    Points
    353
    Par défaut
    tu t'embêtes pour rien...

    fais le "replace" par défaut, plutôt que de parcourir les chaines caractère par caractère, parce que question perfs...

  17. #17
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 47
    Points : 41
    Points
    41
    Par défaut
    ah donc si la fonction replace ne trouve rien , ca ne fait rien?
    ok je vais essayer ^^

  18. #18
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 47
    Points : 41
    Points
    41
    Par défaut
    ca marche nickel
    encore une fois merci lexav ^^
    et les autres aussi

  19. #19
    Inactif
    Inscrit en
    Juillet 2002
    Messages
    315
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 315
    Points : 353
    Points
    353
    Par défaut
    Citation Envoyé par Shoryu
    ah donc si la fonction replace ne trouve rien , ca ne fait rien?
    tout à fait

    c'est pour cela qu'il faut l'utiliser systématiquement lors de l'insertion d'un champ texte

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

Discussions similaires

  1. Probleme dans une boucle do while
    Par serna dans le forum Langage
    Réponses: 5
    Dernier message: 03/06/2015, 16h27
  2. probleme dans une boucle do while
    Par oldscrout dans le forum Débuter
    Réponses: 2
    Dernier message: 30/12/2008, 17h02
  3. problème de recordset dans une boucle while
    Par sebac dans le forum VBA Access
    Réponses: 1
    Dernier message: 04/06/2007, 11h47
  4. Réponses: 6
    Dernier message: 28/04/2006, 09h14
  5. probleme de passage dans une boucle
    Par EssaiEncore dans le forum ASP
    Réponses: 16
    Dernier message: 15/02/2005, 17h39

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