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 :

[VBA Access] Lier une table (d'une base externe).


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut [VBA Access] Lier une table (d'une base externe).
    Bonjour à tous,

    Je ne fait que très rarement du VBA, et j'ai besoin d'automatiser une fonctionnalité de l'interface Acces.

    En fait, j'aimerais faire, par le code:
    Fichier/Données externes/Lier les tables.

    Je mettrait, en paramètre de ma fonction juste le chemin de la base et le nom de la(des) table(s).

    Est-ce possible ?
    Si oui, je veux bien quelques indices pour démarrer dans le bon sens.

    Merci d'avance.

  2. #2
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Bonjour

    Dans l'objet CurrentDB, tu vas trouver une méthode nommée CreateTableDef qui te permet d'ajouter une table attachée via VBA.

    Un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim tbl As TableDef
       Set tbl = CurrentDB..CreateTableDef("LocalTableName", dbAttachSavePWD, "RemoteTableName" , ";DATABASE=C:\Temp\MaDB.mdb")
       CurrentDB.TableDefs.Append tbl
       CurrentDB.Refresh
     
       Set tbl=Nothing

  3. #3
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    Bonjour cavo789;

    Génial, ca marche a merveille... En plus c'est pas trop lourd.
    Par contre, il ne connait pas le refresh.

    Dans la continuité du truc.
    sais-tu comment faire pour voir si elle a déjà été ajoutée (si elle existe)
    et aussi pour défaire ce lien (je n'ai pas vu de "delete" dans l'objet "CurrentDb"... ca me surprendrait que ce soit un drop table standard).

  4. #4
    Expert confirmé
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Par défaut
    Salut,

    C'est un sujet très courant sur ce forum :

    http://dolphy35.developpez.com/artic...sReseaux/#LVII

    il y a dans le lien une explication et une fonction toute faite avec en paramètre le chemin de la bdd Dorsale, la fonction te renvoi true si ok, sinon False

    Dolphy

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Par défaut
    Moi j'utilise une autre méthode qui est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.TransferDatabase acLink, "Microsoft Access", edDataBase.Value, acTable, lbTableSrc.Value, edTableDest.Value
    edDataBase.Value étant le nom de la base de données distante.
    lbTableSrc.Value étant le nom de la table à lier.
    edTableDest.Value sera le nom de la table attachée en local.

    Si tu veux connaître les différents paramêtres de la fonction, tu n'as qu'à appeler l'aide de VB.

    Ensuite pour supprimer le lien, tu exécutes une requête SQL du type "DROP TABLE" sur ta table liée, ça casse le lien sans toucher à la table source.

    Si tu veux connaître toutes les tables liées de ta base, tu peux le faire à l'aide de cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Name, ForeignName, Database, Type
    FROM MSysObjects
    WHERE Type=6 And Name Not Like "~*";
    "Type=6" correspond aux tables de type attachées.
    "Name Not Like "~*"" permet de ne pas remonter les tables temporaires (par exemple, si tu supprime une table, elle reste avec un tilde devant son nom pendant un moment).

    Cette requête te permet d'avoir plein d'information sur l'état de ta base de données, tu as qu'à faire "SELECT * FROM MSysObjects" pour voir l'intégralité de la table.

  6. #6
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    Extra !

    Merci à tous pour ces renseignements.

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

Discussions similaires

  1. copier une table d'une BDD dans une table d'une autre BDD
    Par faniette dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/05/2013, 10h17
  2. Réponses: 1
    Dernier message: 19/10/2011, 12h13
  3. [AC-2003] Lier les tables d'une Base1 dans une Base3 via une Base2
    Par ted the Ors dans le forum VBA Access
    Réponses: 0
    Dernier message: 30/12/2009, 11h58
  4. [AC-2003] insert des données d'une table dans une table d'une base externe
    Par marieo dans le forum VBA Access
    Réponses: 1
    Dernier message: 30/11/2009, 14h29
  5. Copier les enregistrements d'une table vers une table d'une autre DB
    Par karinette21 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/11/2008, 21h50

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