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 :

VBA Tables Liées


Sujet :

Access

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 91
    Points : 92
    Points
    92
    Par défaut VBA Tables Liées
    Bonjour,
    J'ai 2 bases :
    Base Frontale
    Base Dorsale
    La base dorsale est sauvegardée tous les mois :
    200601_maBase
    200602_maBase
    200603_maBase
    Je voudrai modifier le lien en VBA de mes tables liées afin de pouvoir me connecter sur les bases archivées.
    Je crois avoir déjà lu quelque chose sur le sujet mais n'arrive pas à remettre la main dessus.
    Merci.

  2. #2
    Membre confirmé
    Avatar de Petogaz
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 479
    Points : 580
    Points
    580

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 91
    Points : 92
    Points
    92
    Par défaut
    Je suis parti de là mais avec une différence c'est que je ne souhaite pas mettre à jour les attaches à partir de la liste des tables de ma base dorsale mais à partir des tables déjà liées dans ma base frontale.
    Comme la valeur du lien est en lecture seule je liste les tables dans un tableau je supprime les tables puis je refais le lien sur la nouvelle base .
    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
    Private Sub btn_LienTable_Click()
    Dim chemin As String
    Dim BD As DAO.Database
    Set BD = CurrentDb
    Dim tb As DAO.TableDef
    Dim rst As DAO.Recordset
       'On ouvre un curseur sur la table
        Set rst = CurrentDb.OpenRecordset("SELECT valeur from _SystemMaitre where type = 'CheminBaseData'")
        chemin = rst("valeur")
     
     
    For Each tb In BD.TableDefs
        If Left(tb.Name, 4) <> "MSys" Then
            If Len(tb.Connect) > 0 Then
                DoCmd.RunSQL "DROP TABLE [" & tb.Name & "] ;"
                DoCmd.TransferDatabase acLink, "Microsoft Access", chemin & Me.lst_Fichier.Value, acTable, tb.Name, tb.Name, False
            End If
        End If
    Next tb

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Salut,


    Citation Envoyé par F1

    Connect, propriété

    Définit ou renvoie une valeur fournissant des informations sur la source d'une connexion ou d'une base de données ouvertes, d'une base de données utilisée dans une requête directe ou d'une table liée. Avec les objets Database, les nouveaux objets Connection, les tables liées et les TableDef n'ayant pas encore été ajoutés à une collection, cette propriété est en lecture/écriture. Avec les objets QueryDef et les tables de base, cette propriété est en lecture seule.
    Si tes tables sont des tables liées tu peux éditer la valeur de connect.

    =>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ...
     
    For Each tb In BD.TableDefs
        If Left(tb.Name, 4) <> "MSys" Then
            If Len(tb.Connect) > 0 Then
                tb.connect = ";DATABASE=" & chemin & Me.lst_Fichier.Value
            End If
        End If
    Next tb
    ...
    Comme indiqué dans la FAQ en fait

    A+

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 91
    Points : 92
    Points
    92
    Par défaut
    Merci,
    Je préfère ceci à ma méthode qui passait par un DROP de table.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 91
    Points : 92
    Points
    92
    Par défaut
    J'ai testé ce code je n'ai pas de message d'erreur à l'execution mais les liens ne se font pas sur la nouvelle base dorsale.

    J'ai vérifié les valeurs (debug print) des mes variables :
    chemin et Me.lst_Fichier.Value
    celles-ci sont correctes et font bien référence à la nouvelle base dorsale sur laquelle je veux me connecter.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Re,




    Et en faisant un debug.print de connect ça te donne le nouveau ou l'ancien lien ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ...
     
    For Each tb In BD.TableDefs
        If Left(tb.Name, 4) <> "MSys" Then
            If Len(tb.Connect) > 0 Then
                tb.connect = ";DATABASE=" & chemin & Me.lst_Fichier.Value
                debug.print tb.connect
            End If
        End If
    Next tb
    ...
    A+

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 91
    Points : 92
    Points
    92
    Par défaut
    Et en faisant un debug.print de connect ça te donne le nouveau ou l'ancien lien ?
    ça me donne le nouveau lien.


    Mais les liens sont inchangés.
    Je le vérifie avec la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT MSysObjects.Name, MSysObjects.ForeignName, MSysObjects.Database
    FROM MSysObjects
    WHERE (((MSysObjects.Type)=6));

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Oupsss




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    For Each tb In BD.TableDefs
        If Left(tb.Name, 4) <> "MSys" Then
            If Len(tb.Connect) > 0 Then
                tb.connect = ";DATABASE=" & chemin & Me.lst_Fichier.Value
                tb.RefreshLink
            End If
        End If
    Next tb
    
    Tdf.RefreshLink

    encore

    A+

Discussions similaires

  1. Mise à jour de table liée via VBA
    Par blacklolou dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 19/12/2012, 13h32
  2. [VBA] Appeler une requete venant d'une table liée ?
    Par fabiolous dans le forum VBA Access
    Réponses: 1
    Dernier message: 18/05/2007, 20h33
  3. [VBA] Clear d'une table liée
    Par Virgile59 dans le forum VBA Access
    Réponses: 1
    Dernier message: 03/04/2007, 15h02
  4. [select dans case] reconnaitre un champ d une table liée
    Par the_edge dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 22/10/2004, 16h47
  5. Count et tables liées ?
    Par seb_perl dans le forum Requêtes
    Réponses: 2
    Dernier message: 09/02/2004, 12h52

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