Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/06/2011, 15h44   #1
Membre Expert
 
Avatar de Gabout
 
Inscription : mai 2006
Messages : 1 298
Détails du profil
Informations personnelles :
Âge : 57
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : mai 2006
Messages : 1 298
Points : 1 289
Points : 1 289
Par défaut Utilisation des variables, durée de vie

Bonjour,

Bien qu'ayant parcouru le tutoriel de Maxence sur la portée et la durée de vie des variables, je me pose une question : peut-on utiliser une seule variable publique pour gérer les requêtes dans du code.

Exemple : j'ai l'habitude d'écrirer
Code :
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
  Set db = CurrentDb
  Set menu = Me.TreeView
  With menu.Nodes
  Set rs = db.OpenRecordset("SELECT tDEP.deplib " & _
                            "FROM (tDEP INNER JOIN " & _
                            "tSIT ON tDEP.depid = tSIT.sitdep) INNER JOIN tUNI ON tSIT.sitid = tUNI.unisit " & _
                            "GROUP BY tDEP.deplib " & _
                            "ORDER BY tDEP.deplib;")
  rs.MoveFirst
  Set NodX = .Add(, , "menu", "Départements", 2, 2)
  Do Until rs.EOF
    a = rs.Fields("deplib")
    b = rs.Fields("deplib")
    c = "menu"
    Set NodX = .Add(c, tvwChild, a, b, 3, 3)
    NodX.ForeColor = RGB(0, 0, 0)
    rs.MoveNext
  Loop
  rs.Close
  Set rs = Nothing
  '
  Set rs = db.OpenRecordset("SELECT tDEP.deplib, tSIT.sitlib " & _
                            "FROM (tDEP INNER JOIN " & _
                            "tSIT ON tDEP.depid = tSIT.sitdep) INNER JOIN " & _
                            "tUNI ON tSIT.sitid = tUNI.unisit " & _
                            "GROUP BY tDEP.deplib, tSIT.sitlib;")
  rs.MoveFirst
  Do Until rs.EOF
Pour des raisons de lisibilité du code, peut-on écrire, si sSQL est déclarée en publique
Code :
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
  Set db = CurrentDb
  Set menu = Me.TreeView
  With menu.Nodes
  sSQL = "SELECT tDEP.deplib " & _
         "FROM (tDEP INNER JOIN " & _
         "tSIT ON tDEP.depid = tSIT.sitdep) INNER JOIN tUNI ON tSIT.sitid = tUNI.unisit " & _
         "GROUP BY tDEP.deplib " & _
         "ORDER BY tDEP.deplib;"
  Set rs = db.OpenRecordset(sSQL)
  rs.MoveFirst
  Set NodX = .Add(, , "menu", "Départements", 2, 2)
  Do Until rs.EOF
    a = rs.Fields("deplib")
    b = rs.Fields("deplib")
    c = "menu"
    Set NodX = .Add(c, tvwChild, a, b, 3, 3)
    NodX.ForeColor = RGB(0, 0, 0)
    rs.MoveNext
  Loop
  rs.Close
  Set rs = Nothing
  '
  sSQL = "SELECT tDEP.deplib, tSIT.sitlib " & _
         "FROM (tDEP INNER JOIN " & _
         "tSIT ON tDEP.depid = tSIT.sitdep) INNER JOIN " & _
         "tUNI ON tSIT.sitid = tUNI.unisit " & _
         "GROUP BY tDEP.deplib, tSIT.sitlib;"
  Set rs = db.OpenRecordset(sSQL)
  rs.MoveFirst
  Do Until rs.EOF
Bref, y-a-t'il une incidence d'utiliser deux fois sSQL dans les deux recordsets ?

Cordialement,
__________________
Gabout
N'oubliez pas le premier réflexe avant de poser une question : consultez les liens en bas de page
Gabout est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 18h20   #2
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour Gabout,

Personnellement, je ne vois aucun problème.
Dès lors que tu affectes le bon contenu à ta variable, avant de faire OpenRecordset.

Mais personnellement, j'aurai tendance à utiliser une variable locale (à la sub ou à la fonction).
Je n'utilise des variables globales que si elles doivent être partagées par plusieurs sub ou fonctions.
C'est ma façon de faire.
Le but étant principalement d'éviter qu'une sub ou une fonction ne modifie une variable utilisée ailleurs.

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 18h25   #3
Membre Expert
 
Avatar de Gabout
 
Inscription : mai 2006
Messages : 1 298
Détails du profil
Informations personnelles :
Âge : 57
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : mai 2006
Messages : 1 298
Points : 1 289
Points : 1 289
Merci de ta confirmation LedZeppII.
A+
__________________
Gabout
N'oubliez pas le premier réflexe avant de poser une question : consultez les liens en bas de page
Gabout est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h19.


 
 
 
 
Partenaires

Hébergement Web