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 :

Questions pratiques sur While objet recordset et variable


Sujet :

ASP

  1. #1
    Membre actif Avatar de tribaleur
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 401
    Points : 237
    Points
    237
    Par défaut Questions pratiques sur While objet recordset et variable
    Voila j'ai plusieur question qui ne sont en fait que pour ma culture personnel:
    1-Vaut-il mieux avoir plusieur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set RS = server.createobject("ADODB.recorset")
    ou plusieur variable qui vont prendre les valeurs des différents objet???

    2-Dans du code ASP est-il normale ou non d'avoir plusieur objet recordset???

    3-Est-il normale d'avoir deux ou trois boucles while imbriquer ou est-ce qu'on peut toujours simplifier pour en avoir qu'une???

    Merci d'avance!!!!

  2. #2
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Citation Envoyé par tribaleur
    1-Vaut-il mieux avoir plusieur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set RS = server.createobject("ADODB.recorset")
    ou plusieur variable qui vont prendre les valeurs des différents objet???
    Chaque variable est une ressource du serveur que tu utilises. De même pour les recordset. Moins il y en a mieux c'est.
    Par exemple, je suis souvent étonné de voir des trucs du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    mavar = request.form("txtmavar")
    recordset.open "SELECT * FROM MATABLE WHERE MonCHAMP = " & mavar
    Pourquoi ne pas faire directement?
    recordset.open "SELECT * FROM MATABLE WHERE MonCHAMP = " & request.form("txtmavar")
    Citation Envoyé par tribaleur
    2-Dans du code ASP est-il normale ou non d'avoir plusieur objet recordset???
    L'utilisation de plusieurs recordset se justifie quand tu as besoin de données issues de plusieurs tables en mm temps. On oubli peut-être que la plupart du temps une requete avec des jointures est très efficace.
    Personnellement, dans chaque procedure je n'ai qu'un recordset, rarement plus de deux en même temps tous les cas. Je les ouvre et les ferme au fur et à mesure. Les tableaux rendent aussi bcp de services.
    Citation Envoyé par tribaleur
    3-Est-il normale d'avoir deux ou trois boucles while imbriquer ou est-ce qu'on peut toujours simplifier pour en avoir qu'une???
    Des boucles imbriquées, oui cela arrive. Il ne faut pas qu'elles durent trop longtemps.
    A+

  3. #3
    Membre actif Avatar de tribaleur
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 401
    Points : 237
    Points
    237
    Par défaut
    Ok merci!!!
    Juste comma ça j'ai 4 boucles while imbriquées avec chacune pour condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while not un_de_mes_4_RS.eof
    ...
    un_de_mes_4_RS.movenext
    wend
    En sachant que j'ai 5 objet recordset (4 pour mes boucles et 1 pour lecture d'une table dans mes boucles).
    Je suis en train de voir pour simplifier tout ça mais c'est pas évident.

  4. #4
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    C'est certain. Il faut faire autrement. C'est le genre de boucle qui plante l'application. Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <%
    z = 0
    for i = 0 to 99
    	for j = 0 to 99
    		for k = 0 to 99
    			for l = 0 to 99
    				z = z + 1
    			next
    		next
    	next
    next
    response.Write(z)
    %>
    Ce code est fait de boucle FOR imbriquée. Cela simule tes WHILE avec des recordset de 100 enregistrements (ce qui n'est pas beaucoup). Au total z fait 100 millions de tours!

    A mediter... Pense aussi à la pagination.

    A+

  5. #5
    Membre actif Avatar de tribaleur
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 401
    Points : 237
    Points
    237
    Par défaut
    Bon à un endroit j'ai réussit à enlever une boucle "while" et j'ai réussi à supprimer un objet "recordset".
    Je met mon code si quel'qu'un à une idée pour le simplifier!!!

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    <%option explicit%>
     
    <!--#include virtual = "/isy/formulaires/xxflboul/enquete/function.asp"-->
     
    <%
           '/////////// Déclaration de variable///////////////
     dim DSN_BASE,conn,RS,RS2,RS3,RS4,RS5
     dim mysql
     dim i                   '////pour les boucle "for"///
     dim som                 '////total des note des question///
     dim nomb                '////nb de note des question///
     dim tab_split           '////pout la fonction "split"///
     dim inti_rad            '////résultat à afficher pour les "radio" ou les "select" sans note///
     
     
           '//////////connexion base de données///////////////
    connexion_bd_access("enquete.mdb")    
     
     '////RS est créer dans ma fonction connexion_bd_access/////
     set RS2 = server.createobject("adodb.recordset")
     set RS3 = server.createobject("adodb.recordset")
     set RS4 = server.createobject("adodb.recordset")
     
     
    mysql="select service as se, numero_service as ns from T_service"
    if(RS2.state = 1) then RS2.close
    RS2.open mysql, conn
     
     
     
    while not RS2.eof                        '////////////////pour tous les service//////////////////
     
      mysql="select count(num_quest) as nb from T_question where numero_service="&RS2("ns")
      if (RS.state = 1) then RS.close
      RS.open mysql, conn
     
      if RS("nb")>0 then                     '////////si il existe dans la table des questions pour le service "RS2("se")" alors...////////////  
        mysql="select num_quest as nq, intituler_quest as iq, type_quest as tq from T_question where numero_service="&RS2("ns")
        if (RS.state = 1) then RS.close
        RS.open mysql, conn
     
     
     
        while not RS.eof							'///////////////////pour toutes les question du service RS2("ns")     
         mysql="select  DISTINCT date_rep as dr from T_reponse"
         if (RS3.state = 1) then RS3.close
         RS3.open mysql, conn
     
         if RS("tq")<>"textarea" then
     
     
           if RS("tq")="titre" then             '///////////////type TITRE///////////
     
     
           else
     
           end if  
     
     
     
           if RS("tq")="text" then              '/////////////type TEXT//////////////
             while not RS3.eof                  '///////////pour toutes les dates////////     
     
     
    	RS3.movenext	 		 
    	if not RS3.eof then             
     
               else 
     
               end if
             wend
     
           else                                 '//////////////Sinon si du type RADIO alors.../////////////  
             if RS("tq")="radio" then
               while not RS3.eof                 '///////////pour toutes les dates////////
                 mysql="select nom_chbox_radio as nom from T_question where num_quest="&RS("nq")
                 if (RS4.state = 1) then RS4.close
                 RS4.open mysql, conn
                 tab_split=split(RS4("nom"),";")
                 som=0
                 inti_rad=""
     
                 for i=0 to ubound(tab_split)                          
                   mysql="select count(num_rep) as nr from T_reponse where num_quest="&RS("nq")&" and date_rep='"&RS3("dr")&"' and reponse='"&tab_split(i)&"'"
                   if (RS4.state = 1) then RS4.close
                   RS4.open mysql, conn
                   nomb=RS4("nr")          
     
                   if nomb>som then
                     som=nomb
                     inti_rad="- "&tab_split(i)
     
                   else
                     if nomb<>0 then                 
                       if nomb=som then inti_rad=inti_rad&"<br/>- "&tab_split(i)                 
                     end if 
     
                   end if  
                 next
     
                 if som>0 then
     
     
                 else
     
                 end if
     
                 RS3.movenext
                 if not RS3.eof then 
     
                 else 
     
                 end if  
               wend
     
             else          
                 while not RS3.eof                  '///////////pour toutes les dates////////
                   mysql="SELECT Count(num_rep) AS nbs FROM T_reponse WHERE (((T_reponse.reponse)='1' Or (T_reponse.reponse)='2' Or (T_reponse.reponse)='3' Or (T_reponse.reponse)='4' Or (T_reponse.reponse)='5' Or (T_reponse.reponse)='6' Or (T_reponse.reponse)='7' Or (T_reponse.reponse)='8' Or (T_reponse.reponse)='9' Or (T_reponse.reponse)='10' Or (T_reponse.reponse)='0') AND ((T_reponse.num_quest)="&RS("nq")&") AND ((T_reponse.date_rep)='"&RS3("dr")&"'))"
                   if (RS4.state = 1) then RS4.close
                   RS4.open mysql, conn
                   nomb=RS4("nbs")
     
                   if RS4("nbs")>0 then
                     mysql="SELECT num_rep AS nbs, reponse as repo FROM T_reponse WHERE (((T_reponse.reponse)='1' Or (T_reponse.reponse)='2' Or (T_reponse.reponse)='3' Or (T_reponse.reponse)='4' Or (T_reponse.reponse)='5' Or (T_reponse.reponse)='6' Or (T_reponse.reponse)='7' Or (T_reponse.reponse)='8' Or (T_reponse.reponse)='9' Or (T_reponse.reponse)='10' Or (T_reponse.reponse)='0') AND ((T_reponse.num_quest)="&RS("nq")&") AND ((T_reponse.date_rep)='"&RS3("dr")&"'))"
                     if (RS4.state = 1) then RS4.close
                     RS4.open mysql, conn
                     som=0
     
                     while not RS4.eof
                       som=som+RS4("repo")
                       RS4.movenext
                     wend              
     
                   else
     
                   end if           
     
                   RS3.movenext                    
                   if not RS3.eof then 
     
                   else 
     
                   end if               
                 wend 
     
             end if 
           end if
     
           if RS("tq")="titre" then
     
           end if      
           RS.movenext
     
         else
     
           while not RS3.eof                  '///////////pour toutes les dates////////     
     
             RS3.movenext         
             if not RS3.eof then 
     
             else 
     
             end if
           wend  
     
           RS.movenext   
         end if     
        wend
     
      end if
     
     RS2.movenext
    wend
     
    response.write "</form>"
    if (RS2.state = 1) then RS2.close
    set RS2 = nothing
     
    if (RS3.state = 1) then RS3.close
    set RS3 = nothing
     
    if (RS4.state = 1) then RS4.close
    set RS4 = nothing
     
    deconnection
    %>
    PS:j'ai commencé la programmation cette année en cour avec du pascal sous "Delphi 5".
    J'ai fait très peut de programmation web (un peu de PHP et ce que j'ai appris sur ce forum en ASP).
    Donc soyer indulgeant sur les érreurs s'il vous plait mais si vous avez des conseil ils serront les bien venus
    Pour l'hortographe j'ai commencer y'a longtemps mais bon...
    Merci d'avance

  6. #6
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut


    Peux-tu enlever le code HTML pour améliorer la lisibilité?

    Merci

    A+

  7. #7
    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
    Citation Envoyé par Immobilis
    Par exemple, je suis souvent étonné de voir des trucs du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    mavar = request.form("txtmavar")
    recordset.open "SELECT * FROM MATABLE WHERE MonCHAMP = " & mavar
    Pourquoi ne pas faire directement?
    recordset.open "SELECT * FROM MATABLE WHERE MonCHAMP = " & request.form("txtmavar")
    Ca depend du contexte, dans le cas d'un formulaire qui peut etre affiché vierge ou appelé pour une edition, une bonne habitude est de déclarer autant de variables que de champs de formulaires (que de champs de BD). Leur initialisation dépendra du scénario :
    - Le formulaire est il posté ?
    - Est-ce une edition ?
    - Est-ce une modification ?
    - Est ce un ajout ?
    ...

    Donc oui pour l'economie des ressources serveur, mais oui aussi pour un code clair, lisible et réutilisable.

    Pour le reste je suis entierement d'accord

  8. #8
    Membre actif Avatar de tribaleur
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 401
    Points : 237
    Points
    237
    Par défaut
    Voila j'ai éditer mon premier message avec le code. j'ai enlever tout le code HTML.
    Encore merci !!!

  9. #9
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Citation Envoyé par Gwenn
    Ca depend du contexte, dans le cas d'un formulaire qui peut etre affiché vierge ou appelé pour une edition, une bonne habitude est de déclarer autant de variables que de champs de formulaires (que de champs de BD).
    Je vois pas trop pourquoi... Dans un cas comme dans l'autre tu peux te passer de variable.
    Vierge : request.form
    Prérempli : un recordset.
    Non?
    Citation Envoyé par tribaleur
    PS:j'ai commencé la programmation cette année en cour avec du pascal sous "Delphi 5".
    J'ai fait très peut de programmation web (un peu de PHP et ce que j'ai appris sur ce forum en ASP).
    Bah quel que soit le langage une boucle est une boucle. Ceci dit, tu peux nous expliquer un peu à quoi sert ton code, j'ai la "fleme".
    A+

  10. #10
    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
    C'est vrai que tu peux le faire, mais on peut distinguer plusieurs etapes

    J'ai par exemple besoin de

    vérifier le contenu saisie (est il cohérent sur ce que j'en attend)
    si ce n'est pas le cas, je peux eventuellement remplacé par une valeur par défaut

    Une fois toutes ces vérifications faites, je stocke ce resultat dans une variables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iUser_profil_id = nz(xrequest_numeric("profil_id"),3)
    (nz et xrequest etant des fonctions de request modifiées)

    Cette variable pourra etre utilisé sans une fonction Update ou Insert indiférement. Elle pourra aussi provenir d'une fonction qui va cherche les données dans la base pour édition.

    Je dis bien que je fais le choix de declarer des variables qui peuvent paraitre superflues, mais qui m'aident a avoir un code plus clair, plus structuré, plus facile a maintenir etc...

  11. #11
    Membre actif Avatar de tribaleur
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 401
    Points : 237
    Points
    237
    Par défaut
    En fait ce code va chercher dans une table "T_reponse" des résultats.
    Ces réponses correspondent chacune à une seul question. (mais il peu y avoir plusieurs réponse pour une question).
    Chaque question à un type (checkbox,text,textarea,select,radio,titre).
    En fonction du type de la question on vas réaliser des statistiques.

    Ex:
    Question de type "radio"=>on vas définir quelle réponse à été le plus souvent cocher.

    Ce code ASP vas donc chercher pour chaque question et pour chaque année différentes, les réponses correspondantes et ensuite établire des statistiques.

    Je sais pas si j'ai été bien clair mais voila à quoi sert ce code ASP.
    Il fonctionne très bien (pour le moment ) mais il est vrais que si on peut le simplifier ça peu être bien .

  12. #12
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Est-ce que tu sais ce qu'est une requete avec des jointures entre les table?

  13. #13
    Membre actif Avatar de tribaleur
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 401
    Points : 237
    Points
    237
    Par défaut
    Oui!!!

Discussions similaires

  1. Question Pratique sur les mises a jour
    Par geof dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/11/2007, 17h09
  2. question pratique sur les fonctions 'inutiles'
    Par Plomeg dans le forum C++
    Réponses: 13
    Dernier message: 20/11/2007, 19h58
  3. [VS.net 2005] Question philosophique sur les objets
    Par WriteLN dans le forum Framework .NET
    Réponses: 8
    Dernier message: 23/08/2007, 10h34
  4. [VBa-E] question(s) sur l'objet OLE "image Bitmap"!
    Par gootsu dans le forum Macros et VBA Excel
    Réponses: 41
    Dernier message: 28/07/2006, 17h37
  5. Réponses: 5
    Dernier message: 24/04/2005, 04h09

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