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 :

Modification du chemin des tables liées


Sujet :

VBA Access

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Points : 103
    Points
    103
    Par défaut Modification du chemin des tables liées
    Bonjour à tous,

    J'utilise une application access (2003) dans laquelle les données sont dans une bdd sur le serveur (données.mdb), et les interfaces sont sur chaque poste.
    Jusque là rien que de très classique.

    Lorsque je prends mon portable, je fais une copie de la base des données sur le disque dur.

    Evidemment, toutes les tables pointent vers \\serveur dans les applis.

    Je galère donc pour utiliser ma table en locale et suis obligé de passer par le gestionnaire de tables liées et de mettre à jour toutes les attaches, procédure relativement pénible d'autant qu'il y en a environ cinquante et que pour chacune, il redemande le chemin sur le disque dur.

    Y aurait-il possibilité de modifier le chemin en modifiant directement la valeur du champ database dans la table système MSysObjects où par un autre moyen ?

    Merci de votre aide

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 628
    Points : 34 333
    Points
    34 333
    Par défaut
    salut,
    il y a à boire et à manger dans le code, mais c'est tout moi qui l'ai fait
    en parametre, les noms sont assez explicites en principe

    il faut que tu fournisses en entrée le nouveau path de connection (peu importe l'ancien en fait).
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    Function MajLienODBC(PathBaseAModifier As String, TitreTableAModifier As String, Connect As String, TitreTableSource As String) As Boolean
    Dim db As DAO.Database
    Dim tbl As DAO.TableDef
    Dim temp As Boolean
    Dim tables As DAO.TableDef
    Dim relation As DAO.relation
    Dim rel As DAO.relation
    Dim chp As DAO.Field
    Dim a As DAO.Property
    Dim position As Long
        On Error GoTo fin
        MajLienODBC = False
        temp = False
        ' Ouverture de la base de données
        Set db = DBEngine.OpenDatabase(PathBaseAModifier)
        For Each tables In db.TableDefs
            If tables.Name = TitreTableAModifier Then
                temp = True
                Exit For
            End If
        Next
     
        ' Création d'un nouvel objet TableDef.
        Set tbl = db.CreateTableDef(TitreTableAModifier & "_piou")
        ' Définition des propriétés pour créer le lien
     
        tbl.Connect = Connect
        tbl.SourceTableName = TitreTableSource
        'Ajout de la nouvelle table
        db.TableDefs.Append tbl
        db.TableDefs.Refresh
        If temp Then
            'Création des relations identiques à l'ancienne table
            For Each relation In db.Relations
                If relation.table = TitreTableAModifier Then
                    Set rel = db.CreateRelation(tbl.Name & relation.ForeignTable, tbl.Name, relation.ForeignTable)
                    rel.Attributes = relation.Attributes
                    Set chp = rel.CreateField(relation.Fields(0).Name) ' Fournit le nom du champ clé externe.
                    chp.ForeignName = relation.Fields(0).ForeignName
                    rel.Fields.Append chp
                    db.Relations.Append rel
                    db.Relations.Refresh
                End If
                If relation.ForeignTable = TitreTableAModifier Then
                    Set rel = db.CreateRelation(relation.table & tbl.Name, relation.table, tbl.Name)
                    rel.Attributes = relation.Attributes
                    Set chp = rel.CreateField(relation.Fields(0).Name) ' Fournit le nom du champ clé externe.
                    chp.ForeignName = relation.Fields(0).ForeignName
                    rel.Fields.Append chp
                    Debug.Print rel.Name
                    db.Relations.Append rel
                End If
            Next
            'Suppression des relations de l'ancienne table
            For Each relation In db.Relations
                If relation.table = TitreTableAModifier Or relation.ForeignTable = TitreTableAModifier Then
                    db.Relations.Delete relation.Name
                End If
            Next
            'Suppression de l'ancienne table
            db.TableDefs.Delete TitreTableAModifier
            'Renommage de la nouvelle table
            db.TableDefs(TitreTableAModifier & "_piou").Name = TitreTableAModifier
            ' Renommage des relations sans le _piou
            For Each relation In db.Relations
                If Replace(relation.Name, "_piou", "") <> relation.Name Then
                    Set rel = db.CreateRelation(Replace(relation.Name, "_piou", ""), Replace(relation.table, "_piou", ""), Replace(relation.ForeignTable, "_piou", ""))
                    rel.Attributes = relation.Attributes
                    Set chp = rel.CreateField(relation.Fields(0).Name) ' Fournit le nom du champ clé externe.
                    chp.ForeignName = relation.Fields(0).ForeignName
                    rel.Fields.Append chp
                    Debug.Print rel.Name
                    db.Relations.Delete relation.Name
                    db.Relations.Append rel
                    db.Relations.Refresh
                End If
            Next
            MajLienODBC = True
        End If
        db.Close
        Exit Function
    fin:
    End Function
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Points : 103
    Points
    103
    Par défaut
    Merci beaucoup jpcheck. cela m'a été très utile.

    A bientôt

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2007
    Messages : 184
    Points : 188
    Points
    188
    Par défaut
    Sur le même principe, avec un code un peu moins long..
    voila ce que j'utilise...

    fevec

    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
    22
    23
    24
    25
    26
    27
    28
    29
     
    Function ModifAttache(strDBPath)
    ' Modification simple des attaches
    ' sur le modèle de fGetLinkPath de Dev Ashish
    ' 21/07/2005
        Dim vieuxnom As String, stPath As String
        Dim loTd As TableDef
        Dim dbs As Database
        Dim I, nb As Integer
        I = 0
        CurrentDb.TableDefs.Refresh
        ' nb de table
        nb = CurrentDb.TableDefs.Count
        For Each loTd In CurrentDb.TableDefs
            On Error Resume Next
           stPath = dbs.TableDefs(loTd.Name).Connect
           If stPath = Null Then
            Else
                I = I + 1
                vieuxnom = fGetLinkPath(loTd.Name)
                loTd.Connect = ";Database=" & strDBPath
                loTd.RefreshLink
            Debug.Print loTd.Name; " "; fGetLinkPath(loTd.Name); " à la place de : "; vieuxnom
             End If
        Next loTd
        Set loTd = Nothing
        CurrentDb.TableDefs.Refresh
        MsgBox "Terminé." & vbCrLf & I & " tables attachées pointent désormais vers la base de données " & strDBPath, vbOKOnly, "Procédure terminée avec succés"
    End Function

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

Discussions similaires

  1. Modifier le chemin des tables liées
    Par nonaparus dans le forum VBA Access
    Réponses: 5
    Dernier message: 27/09/2007, 20h38
  2. Réponses: 8
    Dernier message: 20/02/2007, 17h33
  3. definir chemin pour table liée
    Par branqueira dans le forum Access
    Réponses: 4
    Dernier message: 22/10/2005, 13h44
  4. Chemin des tables attachées en VBA
    Par stigma dans le forum Access
    Réponses: 3
    Dernier message: 17/06/2005, 09h42
  5. Mise à jour des tables liées + TIMESTAMP
    Par Homegrown dans le forum Access
    Réponses: 11
    Dernier message: 25/04/2005, 21h52

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