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

IHM Discussion :

Masquer tables et requêtes au démarrage [AC-2003]


Sujet :

IHM

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    353
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 353
    Points : 181
    Points
    181
    Par défaut Masquer tables et requêtes au démarrage
    Bonsoir,

    1. Masquer tables
    J'ai trouvé le code :
    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
    Function HiddenTable(strTable As String, boHidden As Boolean)
     
        '//
        '// Usage :
        '// HiddenTable "LaTable", True or False
        '//
        Dim tdf As TableDef
        For Each tdf In CurrentDb.TableDefs
            If tdf.Name = strTable Then
                If boHidden Then
                        tdf.Attributes = dbHiddenObject
                    Else
                        tdf.Attributes = 0
                End If
            End If
        Next
        '// Si vous faites le test dans la fenêtre d'exécution directe
        '// il faut rafraichir la fenêtre Access pour observer l'effet
        Application.RefreshDatabaseWindow
     
    End Function
    qui permet de masquer ou d'afficher une table. L'inconvénient est qu'il faut mettre la fonction autant de fois qu'il y a de tables.
    Comment faire une boucle pour masquer ou afficher toutes les tables?

    2. Masquer les requêtes
    Lorsque je remplace "Table" par "Query" pour masquer/afficher les requêtes, j'ai une erreur sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tdf.Attributes = dbHiddenObject
    Comment faire?

    Jean-Pierre

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    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 : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonsoir,

    1. Je ne sais pas s'il est prudent de jouer avec la propriété Attributes.
    Par ailleurs, j'ai constaté que ça ne fonctionnait pas avec des tables liées.

    2. Pour les requêtes, il n'y a pas de propriété Attributes.

    Il y a une autre façon de masquer des objets base de données, avec Application.SetHiddenAttribute.
    On peut cependant les afficher si on coche l'option "Afficher les objets masqués".

    Exemple de code pour les tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub MasquerTables(bMasquer As Boolean)
    Dim db As DAO.Database, td As DAO.TableDef
    Dim lgAttr As Long
     
    Set db = CurrentDb
    For Each td In db.TableDefs
        If (td.Attributes And dbSystemObject) = 0 And _
           (Left(td.Name, 1) <> "~") Then
           Application.SetHiddenAttribute acTable, td.Name, bMasquer
        End If
    Next
    Application.RefreshDatabaseWindow
    End Sub
    Exemple de code pour les requêtes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub MasquerRequetes(bMasquer As Boolean)
    Dim db As DAO.Database, qd As DAO.QueryDef
     
    Set db = CurrentDb
    For Each qd In db.QueryDefs
        If (Left(qd.Name, 1) <> "~") Then
           Application.SetHiddenAttribute acQuery, qd.Name, bMasquer
        End If
    Next
    Application.RefreshDatabaseWindow
    End Sub
    A+

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    353
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 353
    Points : 181
    Points
    181
    Par défaut
    Bonsoir,

    Merci pour la réponse.

    Masquer les tables avec la propriété Attribute fonctionne avec des tables liées, tout au moins chez moi.

    MàJ : 21-11-2011
    En créant une fonction MasquerTables et une fonction MasquerRequetes, en les placant dans la macro Autoexec (Exécuter code; MasquerTables(true) et Exécuter code; MasquerRequetes(true)) ça fonctionne nickel.

    Jean-Pierre

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    353
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 353
    Points : 181
    Points
    181
    Par défaut
    Bonjour,

    Après avoir appliqué ta méthôde à trois BD toutes avec des tables liées, je constate que :
    • la fonction MasquerRequetes fonctionne à chauqe fois,
    • la fonction MasquerTables ne fonctionne pas toujours (1 fois sur 3)!!

    Lorsque ça ne fonctionne pas, j'ai l'erreur sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                Application.SetHiddenAttribute acTable, td.Name, bMasquer
    Jean-Pierre

  5. #5
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    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 : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonjour,

    Citation Envoyé par jeanpierre78 Voir le message
    Masquer les tables avec la propriété Attributes fonctionne avec des tables liées, tout au moins chez moi.
    J'avais codé différemment, en mettant à 1 ou 0 le bit dbHiddenObject.
    Je ne voulais pas mettre 0 dans Attributes pour une table liée, de peur d'effacer le bit dbAttachedTable.
    En effet, Attributes est une combinaison de plusieurs attributs.
    Il s'avère que la propriété Attributes fonctionne d'une manière particulière :
    Si on affecte 0 à la propriété Attributes d'une table liée, cela n'efface pas dbAttachedTable.

    Donc tu as raison, ça fonctionne avec des tables liées.

    J'ai remarqué que mon code (Application.SetHiddenAttribute) ne fonctionnait pas sur des tables dont l'attribut dbHiddenObject était à 1.
    Erreur N° 2016 : Impossible de modifier les attributs des tables système.
    C'est pour cela que je me demandais s'il était prudent de modifier cet attribut.

    Quelle erreur as-tu lorsque ça ne marche pas avec Application.SetHiddenAttribute sur une table ?

    A+

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    353
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 353
    Points : 181
    Points
    181
    Par défaut
    Bonsoir,

    Lorsque ça ne fonctionne pas j'ai l'erreur :

    Erreur d'éxécution '2016' :
    Impossible de modifier les attributs des tables système.


    Jean-Pierre

  7. #7
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    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 : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonjour,

    Ça ressemble à ce que j'ai constaté lorsque l'attribut dbHiddenObject est mis.

    Exécute cette fonction avec False pour enlever dbHiddenObject.
    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
    Function MasquerTablesDAO(bMasquer As Boolean)
    Dim db As DAO.Database, td As DAO.TableDef
    Dim lgAttr As Long, bMasquable As Boolean
     
    Set db = CurrentDb
    For Each td In db.TableDefs
        lgAttr = td.Attributes
        ' On ne touche pas les tables systèmes ni les tables commençant par ~
        bMasquable = ((lgAttr And dbSystemObject) = 0) And (Left(td.Name, 1) <> "~")
        If bMasquable Then
           If bMasquer Then
              td.Attributes = dbHiddenObject
           Else
              td.Attributes = 0
           End If
        End If
    Next
    Application.RefreshDatabaseWindow
    End Function
    Après ça, la méthode Application.SetHiddenAttribute devrait fonctionner.

    A+

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    353
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 353
    Points : 181
    Points
    181
    Par défaut
    Bonsoir,

    Merci la nouvelle fonction MasquerTablesDAO fonctionne avec le 3 BD avec tables liées et avec les 3 BD contenant les tables.

    Jean-Pierre

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

Discussions similaires

  1. [AC-2007] Proteger masquer tables, requêtes, etats, macros, etc. à l'ouverture
    Par Audeo dans le forum Sécurité
    Réponses: 17
    Dernier message: 23/04/2019, 17h14
  2. Tout masquer (tables, formumaires, requêtes)
    Par jnmab dans le forum VBA Access
    Réponses: 6
    Dernier message: 07/01/2011, 09h03
  3. Position d'un enregistrement dans une table ou requête Query
    Par polinevol dans le forum Bases de données
    Réponses: 3
    Dernier message: 21/01/2006, 03h53
  4. interdir importation des tables et requêtes
    Par zian dans le forum Access
    Réponses: 1
    Dernier message: 17/09/2005, 15h23
  5. 3 tables avec requête complexe
    Par yamino dans le forum Langage SQL
    Réponses: 6
    Dernier message: 25/03/2004, 19h50

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