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

Access Discussion :

Variable objet ou de bloc with non définie avec déclaration globale


Sujet :

Access

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2006
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 214
    Points : 169
    Points
    169
    Par défaut Variable objet ou de bloc with non définie avec déclaration globale
    je me suis rendu compte que pour alléger mon code, pour compléter mes table a partir d'un formulaire, il falait que j'écrive une procédure à part pour les compléter. Cependant cette procédure à besoin de variable locales. donc je es est mise là ou je penssait qu'elle pourrais être en globale, et là c'est le drame Access retrouve plus ses petits et erraur '91' Variable objet ou Variable de bloc with non définie!!!

    1) il n'y a pas de bloc with dans mon code, je ne les utilise pas.
    2)il n'y a pas de GoTo non plus

    3) voici ou j'ai fait mais déclaration, m'y suis-je mal pris?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Option Compare Database
    Option Explicit
     
    Dim Db As Database
    Dim RsFichier As Recordset
    Dim RsType As Recorset
    Dim RsCle As Recorset
    Dim RsDes As Recorset
    ________________________________________
    Sub....
    règle numéro 12 : toujours s'offrir une entrée charismatique !

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 342
    Points : 23 801
    Points
    23 801
    Par défaut
    1) si tu as besoin d'une variable locale pourquoi la rendre globale ? Une pratique recommandée est de NE PAS UTILISER ;-) les variables gloables qui sont sources de bugs difficile à traquer. Si tu as besoin de partager une variable entre diverses procédures il vaut mieu utiliser des paramètres explicites.

    2) Probablement que ta variable globale n'est simplement jamais initialisée. Il faut qu'à un moment dans ton code tu lui attribue une valeur.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Citation Envoyé par ben_skywalker
    3) voici ou j'ai fait mais déclaration, m'y suis-je mal pris?
    D'ores et déjà, toute déclaration de module se déclare Private et pas Dim...
    Ensuite, il faut éviter autant que possible de mettre des variables objet en entête de module car même si tu dois réutiliser un Recordset par exemple, il vaut mieux le Fermer, le mettre à Nothing et le réouvrir
    Il est rare d'avoir besoin de recourir à la méthode dans laquelle tu étais prêt à te lancer.
    L'usage de fonctions publiques DAO est plus souple...
    L'usage de propriétés dans une Classe appelant des fonctions locales privées est idéal.

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2006
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 214
    Points : 169
    Points
    169
    Par défaut
    Citation Envoyé par marot_r
    1) si tu as besoin d'une variable locale pourquoi la rendre globale ? Une pratique recommandée est de NE PAS UTILISER ;-) les variables gloables qui sont sources de bugs difficile à traquer. Si tu as besoin de partager une variable entre diverses procédures il vaut mieu utiliser des paramètres explicites.
    Citation Envoyé par argyronet
    Ensuite, il faut éviter autant que possible de mettre des variables objet en entête de module car même si tu dois réutiliser un Recordset par exemple, il vaut mieux le Fermer, le mettre à Nothing et le réouvrir
    j'ai pas du me faire bien comprendre, j'initialise un recordset dans une procédure evènementielle, pour lui faire un tas de test pour le valider, ensuite une fois valide j'appelle une procédure non évènementielle, pour compléter mes table, de mon point de vue pourquoi rajouter des lignes de code quand on peux ne pas les mettre avec des variable globales.

    Citation Envoyé par marot_r
    2) Probablement que ta variable globale n'est simplement jamais initialisée. Il faut qu'à un moment dans ton code tu lui attribue une valeur.

    A+
    l'erreur survient au momoment ou je fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Rs = Db.OpenRecordset(SqlFich, dbOpenDynaset)
    comprend plus sa marchais avant et la sa plante.

    Citation Envoyé par argyronet
    toute déclaration de module se déclare Private et pas Dim...
    ...
    L'usage de fonctions publiques DAO est plus souple...
    L'usage de propriétés dans une Classe appelant des fonctions locales privées est idéal
    désolé je ne comprends pas pour moi une variable se déclare par Dim pas par Private. ensuite peux tu m'expliquer ce qu'est une fonction public DAO?
    ainsi qu'une Classe?
    Sur Access j'arrive à coder normalement, mais la j'ai des erreur à répétition sa me gonfle mais j'essaies de résoudre la majorité de mes problème car sinon le forum serait plein de Topic écrit par moi sauf dans le cas ou ce pb a déjà été traiter. bon sur ceux je vous laisse je vais tester vos solutions. et je vous recontacte pour le résultat @+
    règle numéro 12 : toujours s'offrir une entrée charismatique !

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2006
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 214
    Points : 169
    Points
    169
    Par défaut
    A la suite d'un test SANS RIEN CHANGER, sa a marcher, et là plus rien, la ram à du ce vider et le message d'erreur apparès à ce moment la vous en penser quoi?
    règle numéro 12 : toujours s'offrir une entrée charismatique !

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 342
    Points : 23 801
    Points
    23 801
    Par défaut
    j'ai pas du me faire bien comprendre, j'initialise un recordset dans une procédure evènementielle, pour lui faire un tas de test pour le valider, ensuite une fois valide j'appelle une procédure non évènementielle, pour compléter mes table, de mon point de vue pourquoi rajouter des lignes de code quand on peux ne pas les mettre avec des variable globales.
    C'est parce que tu n'as pas passé assez d'années à chercher les bugs générées par les économies de code de ce genre :-))).

    Pour la déclaration Dim déclare une variable publique visible de tous les modules de ton appli. Private restreint la visibilité à un module donné.

    Là encore c'est une pratique recomandée. Moins tu montres d'informations, moins tes élémenst sont liés entre eux et moins de chance de briser ton code en faisant un changement ailleur. De cela découle notement le conseil d'éliminer les variables globales.

    Bon revenons à ton pb :

    l'erreur survient au momoment ou je fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set Rs = Db.OpenRecordset(SqlFich, dbOpenDynaset)

    Met un point d'arret sur cette ligne ci et vérifie si DB est initalisée et si SqlFich n'est pas vide.


    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2006
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 214
    Points : 169
    Points
    169
    Par défaut
    comment voir si Db est initialiser?
    règle numéro 12 : toujours s'offrir une entrée charismatique !

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 342
    Points : 23 801
    Points
    23 801
    Par défaut
    dans la fenêtre de debugage (CTRL+G) tape ? db.name
    tu devrais voir le nom de ta base en cours et surtout quelque part dans ton code (et vive les variables globales :-) ru devrait avoir un set db=quelquechose (probablement set db=CurrentDB)

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2006
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 214
    Points : 169
    Points
    169
    Par défaut
    set db = currentDb j'ai, mais j'ai l'impression bizarre que quand je suis en mode débogage, ma ram perd ses infos sur les variables
    règle numéro 12 : toujours s'offrir une entrée charismatique !

  10. #10
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 342
    Points : 23 801
    Points
    23 801
    Par défaut
    Ok mais le Set est-il executé avant que u arrive à ta ligne de code ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  11. #11
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2006
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 214
    Points : 169
    Points
    169
    Par défaut
    oui sa c sur, c'est la première ligne de code de la procédure.
    règle numéro 12 : toujours s'offrir une entrée charismatique !

  12. #12
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 342
    Points : 23 801
    Points
    23 801
    Par défaut
    Ok, donc vérififie en mode debug si elle est toujours définie lorsque tu arrive à l'instruction qui plante.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  13. #13
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2006
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 214
    Points : 169
    Points
    169
    Par défaut
    ben la elle ne doi tplus l'être, car message d'erreur objet requit!! et sa ne plante plus maintenant?? bizare j'ai couper la ligne set Db =CurrentDb et j'ai fait annuller et sa marche?? alala, moi je cherche plus à piger sa c'est MS
    règle numéro 12 : toujours s'offrir une entrée charismatique !

  14. #14
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 342
    Points : 23 801
    Points
    23 801
    Par défaut
    Ta dernière réponse est une illustration directe du genre de pbs que posent les variables globales.

    DB est probablement manipulée par plusieurs modules ce qui fait que tu ne peux jamais savoir si elle va être dans un état correct ou pas.

    Je te prédis d'autre bugs innexplicables dans un avenir proche (et quelques bonnes poignées de cheveux en moins :-).

    Bon courage.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/09/2008, 20h14
  2. Variable objet ou variable bloc with non définie
    Par tarbala dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 06/05/2008, 12h19
  3. Variable objet ou variable de bloc With non définie
    Par sl1980 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 24/08/2007, 19h15
  4. Réponses: 11
    Dernier message: 12/06/2007, 09h26
  5. Variable objet ou variable d'un bloc With non définie.
    Par paradeofphp dans le forum ASP.NET
    Réponses: 2
    Dernier message: 21/05/2007, 20h41

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