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

Requêtes et SQL. Discussion :

Masquer Table dans une autre base ACCES [AC-2016]


Sujet :

Requêtes et SQL.

  1. #1
    Membre habitué Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 504
    Points : 128
    Points
    128
    Par défaut Masquer Table dans une autre base ACCES
    Bonjour,

    je cherche à créer une table dans plusieurs bases ACCESS en VBA, j'ai voulu faire un test et la création fonctionne bien mais pas le fait de masquer la table.
    Merci de votre aide,

    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DoCmd.RunSQL "CREATE TABLE [C:\USER\MonUSer\MaBase_TEST.accdb].LISTE (USER CHAR(10),Nom CHAR(25))"
    Application.SetHiddenAttribute acTable, "[C:\USER\MonUSer\MaBase_TEST.accdb.LISTE]", True
    Message d'erreur :
    3011 - Le moteur de base de données Microsoft Access n’a pas pu trouver l’objet [C:\USER\MonUSer\MaBase_TEST.accdb.LISTE]

    > Pourtant la base existe bien car il crée bien la table... mais ne masque pas la table.

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 117
    Points : 5 244
    Points
    5 244
    Par défaut
    Bonjour,

    Je ne connais pas cette méthode mais le dernier crochet est mal placé

  3. #3
    Membre habitué Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 504
    Points : 128
    Points
    128
    Par défaut
    J'ai modifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [C:\USER\MonUSer\MaBase_TEST.accdb.LISTE]
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [C:\USER\MonUSer\MaBase_TEST.accdb].LISTE
    mais j'ai le même message d'erreur...

  4. #4
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 932
    Points
    932
    Par défaut Bonjour fazpedro,
    Dans le premier cas tu utilise une instruction SQL pour créer ta table, donc [C:\USER\MonUSer\MaBase_TEST.accdb] est reconnu comme une base Jet.

    Par contre avec "Application.xxx" tu n'utilise pas le même mécanisme. Là ce sont des objets Access que tu veux manipuler (Table, Formulaire, Macros, même combat) et [C:\USER\MonUSer\MaBase_TEST.accdb] n'est pas reconnu comme application Access. Pour cela il faudrait que tu fasses de l'automation, ou peut-être que tu associes cette base dans les Références du projet.

    Cordialement.

  5. #5
    Membre habitué Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 504
    Points : 128
    Points
    128
    Par défaut
    Merci Paraffine

    Par contre, je ne vois pas comment modifier pour "associer cette base dans les Références du projet"...

    Merci d'avance

  6. #6
    Membre habitué Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 504
    Points : 128
    Points
    128
    Par défaut
    j'ai essayé comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim lDb As DAO.Database
    Dim lTdf As DAO.TableDef
    Set lDb = CurrentDb
    Call lDb.Execute("CREATE TABLE [C:\USER\MonUSer\MaBase_TEST.accdb].LISTE (USER CHAR(7),Nom CHAR(25));")
    Set lTdf = lDb.TableDefs("LISTE")
    lTdf.Attributes = dbHiddenObject
    j'ai le message d'erreur :
    Erreur 3265 - Élémént non trouvé dans cette collection

    Alors que la table "LISTE" a bien été créée...

  7. #7
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 932
    Points
    932
    Par défaut Regarde dans la F.A.Q.
    Il y a ce lienhttps://access.developpez.com/faq/?p...ss#OuvrBddForm qui explique le principe pour manipuler des objets distants - là il s'agit de formulaires-.

  8. #8
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 932
    Points
    932
    Par défaut Attention, à ce que tu demandes, parce que la machine le fait !
    Citation Envoyé par fazpedro Voir le message
    j'ai essayé comme ceci :
    j'ai le message d'erreur :
    Erreur 3265 - Élément non trouvé dans cette collection
    Normal, tu cherche LISTE dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set lDb = CurrentDb
    ta base courante, alors qu'il te faut chercher dans la base distante.

  9. #9
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 274
    Points : 6 583
    Points
    6 583
    Par défaut
    Salut
    Ceci fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Commande0_Click()
    Dim dbs As Database
    Set dbs = OpenDatabase("C:\Users\....\Desktop\NorthwindCS.accdb") ' bdd distante
    dbs.Execute "CREATE TABLE MyTable " _
        & "(FirstName CHAR, LastName CHAR, " _
        & "DateOfBirth DATETIME, " _
        & "CONSTRAINT MyTableConstraint UNIQUE " _
        & "(FirstName, LastName, DateOfBirth));"
    dbs.TableDefs("MyTable").Attributes = dbHiddenObject
    dbs.Close
    End Sub

  10. #10
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 932
    Points
    932
    Par défaut
    Voilà, dans l'exemple d'Hypérion, tu travailles directement dans la base distante, grâce au

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set dbs = OpenDatabase("C:\Users\....")
    où tu dois saisir ton chemin d'accès

    Tu y fais directement et la création et la manipulation de l'objet.

    Tandis que préfixer la table par un chemin ne fonctionne que dans les instructions SQL.

  11. #11
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 117
    Points : 5 244
    Points
    5 244
    Par défaut
    Par curiosité, ça a quel intérêt de masquer une table ? Comme les utilisateurs ne doivent pas les voir autant leur interdire l'accès à l'ensemble de la dorsale, non ?

  12. #12
    Membre habitué Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 504
    Points : 128
    Points
    128
    Par défaut
    Le code ci-dessous fonctionne mais trop.. :
    il fait disparaître la table !
    Ce que je souhaite c'est juste la masquer pour pouvoir aussi la consulter via les options de navigation "Afficher les objets masqués"...
    Merci


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim dbs As Database
    Set dbs = OpenDatabase("C:\USER\MonUSer\MaBase_TEST.accdb") ' bdd distante
    dbs.Execute "CREATE TABLE LISTE (USER CHAR(7),Nom CHAR(25));"
    dbs.TableDefs("LISTE").Attributes = dbHiddenObject
    dbs.Close

  13. #13
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 932
    Points
    932
    Par défaut Oui, c'est comme cela que c'est censé fonctionner
    Pour des tables visibles, tu dois à nouveau changer l'attribut à l'aide de code VBA.

    Tu peux aller voir sur ce lien.

    Notamment pour l'utilisation du MyTableDef.Attributes = dbHiddenObject :
    The code (...) will hide objects in a manner that the tools --> options wont work to show the table again.

  14. #14
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 274
    Points : 6 583
    Points
    6 583
    Par défaut
    Hidden = masquer
    Ce n'est pas parce qu'elle n'est plus visible dans la liste des objets de votre bdd distante que vous ne pouvez pas lire son contenu.
    Une simple syntaxe sql devrait suffire SELECT * FROM LISTE

  15. #15
    Membre habitué Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 504
    Points : 128
    Points
    128
    Par défaut
    Merci à tous !

    Code qui fonctionne pour créer et cacher la table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim dbs As Database
    Set dbs = OpenDatabase("C:\USER\MonUSer\MaBase_TEST.accdb") ' bdd distante
    dbs.Execute "CREATE TABLE LISTE (USER CHAR(7),Nom CHAR(25));"
    dbs.TableDefs("LISTE").Attributes = dbHiddenObject
    dbs.Close
    Code qui fonctionne pour afficher de nouveau la table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim dbs As Database
    Set dbs = OpenDatabase("C:\USER\MonUSer\MaBase_TEST.accdb") ' bdd distante
    dbs.TableDefs("LISTE").Attributes = 0
    dbs.Close

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

Discussions similaires

  1. fedsql et creation de table dans une autre base
    Par Invité dans le forum SAS Base
    Réponses: 2
    Dernier message: 11/10/2017, 10h29
  2. [AC-2003] Lier une table dans une autre base
    Par ishikawa dans le forum Access
    Réponses: 2
    Dernier message: 03/04/2013, 15h52
  3. [AC-2003] exporter une table dans une autre base
    Par alainb dans le forum IHM
    Réponses: 2
    Dernier message: 31/07/2009, 21h41
  4. Réponses: 5
    Dernier message: 08/12/2008, 20h01
  5. Réponses: 4
    Dernier message: 15/03/2007, 21h32

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