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

VBA Access Discussion :

variable globale ou locale pour CurrentDB


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 214
    Par défaut variable globale ou locale pour CurrentDB
    Bonjour à tous,
    je suis en train de reprendre une appli.
    Dans celle-ci, il y a un grand nombre de procédures (liées à des modules ou à des formulaires) qui déclarent une variable Db, puis instancient celle-ci à CurrentDb.
    A la fin de chaque procédure, la variable Db est fermée puis détruite.
    Je me demandais si je n'avais pas meilleur temps de déclarer une seule variable globale au niveau de l'appli, et de l'instancier au moment de la première connexion.
    Je ne sais pas si cela est expliqué quelquepart. En tous les cas, j'ai pas mal cherché et je n'ai pas trouvé de réponse. Si quelqu'un a une idée argumentée, je suis preneur.
    Merci d'avance

  2. #2
    Membre Expert
    Avatar de Demco
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 396
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 396
    Par défaut
    Citation Envoyé par jibouze
    Je me demandais si je n'avais pas meilleur temps de ...
    Je ne connaissais pas l'expression, j'aime bien

    Si tu instancie toujours ta variable a CurrentDB, pourquoi ne pas tout simplement utiliser directement CurrentDB ?
    Je vois l'interet d'une variable si son contenu risque de changer a travers le temps mais il ne semble pas que ce soit le cas.

    Si tu prefere utiliser Db parce que c'est moins long a ecrire alors en effet tu peux utiliser une variable globale. L'utilisation de ce genre de variable est deconseillée mais pour la declaration de connexions ou autre c'est tout de meme bien sympathique. Et si en plus tu es le seul a travailler sur ton application ce n'est meme plus vraiment un probleme pour peu que tu sois organisé.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 214
    Par défaut
    En fait, j'utilise une variable Db parce que j'ai lu dans un tuto (ou une FAQ) sur ce site, qu'il vaut mieux, si on l'utilise plusieurs fois dans la même procédure, faire appel à une variable qui "pointe" sur la base en cours, plutôt que d'utiliser CurrentDb qui crée une nouvelle instance à chaque appel.
    Par exemple, j'ai une procédure qui exécute environ 10 requêtes. J'ai donc 10 fois :

    Si je fais 10 fois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    currentDb.execute(ReqX)
    j'aurai 10 instances de la base en cours.
    Donc, je ne fais pas ça par flemme, mais pour savoir :
    - Si il y a une différence - en ce qui concerne CurrentDb - entre 1 variable globale (au niveau de chaque module, ou même au niveau de l'appli) et une un tas de variables locales ?
    - Si oui, c'est grâve docteur ? (performances, erreurs provoquées...)


    PS : Je découvre que "j'ai meilleur temps" n'est pas reconnu par le grand public. Faut croire que c'est une expression de ma région !

  4. #4
    Membre Expert
    Avatar de Demco
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 396
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 396
    Par défaut
    Citation Envoyé par jibouze
    plutôt que d'utiliser CurrentDb qui crée une nouvelle instance à chaque appel.
    Oula oui c'est vrai ... autant (au temps ?) pour moi. Désolé j'ai failli te faire faire une grosse bourde.

    Il semblerait que ta solution actuelle soit la plus appropriée ... attendons d'autres commentaires

  5. #5
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Comme Arkham.

    De plus les variables globales sont vraiment déconseillées. On les oublie, on se mélange avec les locales, etc... Et surtout elles ne sont libérées que quand on ferme Access.

    Donc la solution actuelle est vraiment la meilleure

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 214
    Par défaut
    Demco a écrit :
    Oula oui c'est vrai ... autant (au temps ?) pour moi. Désolé j'ai failli te faire faire une grosse bourde.
    Pas de souci !

    C'est donc justement parce que l'instruction CurrentDb crée une nouvelle instance que je me demandais si une variable globale n'était plus appropriée.

    En effet, si je crée une seule et unique instance de CurrentDb à l'ouverture du premier formulaire, ça me semble (un peu trop facile ?) moins gourmand que de créer une instance dans chaque procédure qui en a besoin, même si je la libère à la fin de la sub.
    That is the question !

  7. #7
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Demco wrote :
    autant (au temps ?) pour moi
    Au temps, Demco, au temps pour toi : et un, deux, trois...

    Perso je suis favorable à la variable de procédure ( et pas de module) qu'on libère.

    Maintenant c'est vrai qu'une globale ça ne doit pas coûter cher...

    pgz

  8. #8
    Expert confirmé
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Par défaut
    Citation Envoyé par Demco
    Si tu instancie toujours ta variable a CurrentDB, pourquoi ne pas tout simplement utiliser directement CurrentDB ?
    Citation Envoyé par L'aide Access
    La méthode CurrentDb crée une autre instance de la base de données en cours
    Donc à chaque utilisation de CurrentDB il se crée un objet.
    Il est plus que nécessaire d'utiliser une variable pour pouvoir libérer l'objet.

    Quand à savoir si elle doit être locale ou globale, ben je sais pas.

    Personnellement j'aime bien les variables locales :
    - je crée
    - j'utilise
    - je libère

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

Discussions similaires

  1. Variables globales et locales pour main()?
    Par flyingman dans le forum x86 16-bits
    Réponses: 7
    Dernier message: 03/06/2013, 18h25
  2. variables globales et locales
    Par une_tite_question dans le forum Débuter avec Java
    Réponses: 9
    Dernier message: 25/06/2008, 18h32
  3. Variable globale et locale
    Par momo70 dans le forum MATLAB
    Réponses: 1
    Dernier message: 03/07/2007, 09h49
  4. variables globales ou locales
    Par exhortae dans le forum C
    Réponses: 6
    Dernier message: 09/04/2007, 01h29

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