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 :

programmer la modification du chemin d'accès des tables liées


Sujet :

Access

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 3
    Points : 5
    Points
    5
    Par défaut programmer la modification du chemin d'accès des tables liées
    Lorsque je maintiens à distance une application 'double base', Je suis souvent appelé à réviser des formulaires, créer de nouvelles requêtes ou de nouveaux états, présents dans la base 'interface utilisateur'. Cette dernière contient les attaches aux tables opérationnelles, dans une autre base, accessible généralement en réseau sur un serveur. Le chemin d'accès (Ex : \\NTmachin\data\toto.mdb) étant différent dans la config de maintenance (Ex : C:\Mes documents\toto.mdb), j'ai recours au gestionnaire d'attaches deux fois (avant la maintenance distante puis avant la réinstallation sur site. C'est très lourd quand de nombreuses tables attachées sont utilisées.
    Si on oublie cette manip, on tombe inévitablement sur le message du genre "Fichier 'C:\Mes documents\toto.mdb' introuvable. ". C'est gênant lorsque c'est chez l'utilisateur (ou le client).

    Quelle astuce 'élégante' permettrait d'alterner la source en cas d'oubli ? J'avais pensé observer le champs 'Database' de la table cachée MSysObjects.. mais je n'ai pas touvé la fonction qui permet chirurgicalement de mettre à jour cette table systême et c'est peut-être une fausse piste.

    Je suis persuadé que ce problème est récurrent. Je n'ai cependant pas réussi à piéger une solution dans la base de connaissances de developpez.com (en particulier la FAQ Access).

    Merci de me donner des pistes (Access 2000 ou supérieur) !

  2. #2
    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
    Bonjour à toi également,

    J'ai pas bien compris ta problèmatique, mais si c'est de pouvoir facillement basculer les liens d'une base dorsale de test/maintenance vers la base dorsale "réelle", je te propose une fonction du genre de ça :

    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
    Function fRediriger_donnees(arg_chemin As String) As Boolean
     
     
        Dim Var As Variant
        Dim I As Integer
        Dim Tdf As TableDef
        Dim Db As Database
     
     
        On Error GoTo fRediriger_donnees_Error
     
     
        fRediriger_donnees = False
        Set Db = CurrentDb
        Var = SysCmd(SYSCMD_INITMETER, "Patientez !!! Réorganisation en cours des données...", Db.TableDefs.Count)
        For I = 0 To Db.TableDefs.Count - 1
            Set Tdf = Db.TableDefs(I)
            If Tdf.Connect & "" <> "" Then 'la table est attachée
                Tdf.Connect = ";DATABASE=" & arg_chemin
                Tdf.RefreshLink
            End If
            Set Tdf = Nothing
            Var = SysCmd(SYSCMD_UPDATEMETER, I)
        Next I
        fRediriger_donnees = True
     
     
    fRediriger_donnees_Exit:
        Var = SysCmd(SYSCMD_REMOVEMETER)
        Set Db = Nothing
        Set Tdf = Nothing
        Exit Function
     
    fRediriger_donnees_Error:
        fError Err.Number, Err.Description, "fRediriger_donnees"
        fRediriger_donnees = False
        GoTo fRediriger_donnees_Exit
     
     
    End Function
    que tu utilise comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Sub donnees_locales()
    fRediriger_donnees ("D:\xxxxxxxxxxxx.mdb")
    End Sub
    Sub donnees_reseau()
    fRediriger_donnees ("T:\xxxxxxxxx.mdb")
    End Sub
    A+

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 3
    Points : 5
    Points
    5
    Par défaut Chemin d'accès à des tables liées
    Salut Muhad'hib,

    Comme tu dis, il s'agit bien en effet de basculer les liens d'une base dorsale de test/maintenance vers la base dorsale "réelle"
    ... et vice-versa !

    Je ne connaissais pas l'expression "base dorsale" et j'utilisais "interface utilisateur".
    C'est une base qui ne comporte qu'une table en propre (les autres étant attachées),
    c'est la table 'Versions' qui me permet d'enregistrer l'historique des maintenances de l'appli.
    Concepteur de cette base 'dorsale', j'assure la maintenance 'hors' site réel par communication via email.


    Je me doutais bien qu'une boucle bien sentie me permettrait une économie de temps appréciable.
    Laissons passer le week-end et je mettrai cela au point la semaine prochaine.

    En attendant, Merci !

  4. #4
    Membre habitué Avatar de Currahee
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 157
    Points : 130
    Points
    130
    Par défaut
    Bonjour,

    J'ai voulu réutiliser le code de Muhad'hib pour mettre à jour les liens des tables d'une de mes bases Access 2000, mais j'ai une erreur suite à la tentative d'utilisation de la méthode RefreshLink : Pilote ISAM introuvable..

    Quelqu'un a t'il déjà été confronté à ce problème ???

    Merci d'avance pour vos éventuelles réponses

  5. #5
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 183
    Points : 1 362
    Points
    1 362
    Par défaut
    Tu n'as QUE des tables Access liées ?

  6. #6
    Membre habitué Avatar de Currahee
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 157
    Points : 130
    Points
    130
    Par défaut
    Citation Envoyé par Kloun
    Tu n'as QUE des tables Access liées ?
    Oui j'ai deux bases access avec des tables de l'une liées à des tables de l'autre.

    Je viens de tenter de mélanger le code précédent avec celui-ci conseillé par ailleurs sur le forum :http://access.developpez.com/faq/?pa...#RetablLienTbl

    C'est à dire trouver toutes les tables liées à mettre à jour, les supprimer (ça marche...) puis les recréer. Et je tombe sur exactement le même problême qu'avec un refreshlink, cette fois à l'exécution de la méthode Append

  7. #7
    Membre régulier
    Homme Profil pro
    Technicien biomédical
    Inscrit en
    Mai 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien biomédical
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2005
    Messages : 60
    Points : 81
    Points
    81
    Par défaut
    bonjour;

    Je travail avec une configuration identique.
    J'ai résolu en utilisant un .bat en ouverture de session
    Sur le profil en réseau, le .bat connecte les tables sur un lecteur réseau Z:
    En local, un autre .bat lancer au démarrage, connecte sur les tables de données présentent sur le disque local par la commande Subst Z: C:\chemin du dossier...

    Ne pas oublier de remettre à jour les tables locales de temps en temps !

  8. #8
    Membre habitué Avatar de Currahee
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 157
    Points : 130
    Points
    130
    Par défaut
    Citation Envoyé par Fifi69
    bonjour;

    Je travail avec une configuration identique.
    J'ai résolu en utilisant un .bat en ouverture de session
    Sur le profil en réseau, le .bat connecte les tables sur un lecteur réseau Z:
    En local, un autre .bat lancer au démarrage, connecte sur les tables de données présentent sur le disque local par la commande Subst Z: C:\chemin du dossier...

    Ne pas oublier de remettre à jour les tables locales de temps en temps !


    Merci, mais je pige pas grand chose là... Mon pb n'est pas de me connecter à une base ou à une autre, c'est de lier deux bases ensemble avec des tables liées. Quand je bouge d'emplacement les deux bases access, je veux un code pour ne pas avoir à mettre à jour les liaisons des tables une à une à la main.

    Les codes donnés sont corrects, c'est au niveau "hard" que j'ai un souci : "pilote ISAM introuvable" quand sont lancées les méthodes refreshlink ou append sur mes tables.

    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
    Function fRediriger_donnees(arg_chemin As String) As Boolean
     
     
        Dim Var As Variant
        Dim I As Integer
        Dim Tdf As TableDef
        Dim Newtable As TableDef
        Dim NomTable As String
        Dim Db As Database
     
        fRediriger_donnees = False
        
        Set Db = CurrentDb
        
        For I = 0 To Db.TableDefs.Count - 1
            Set Tdf = Db.TableDefs(I)
            ' Sauvegarde du nom de la table
            NomTable = Db.TableDefs(I).Name
            If Tdf.Connect & "" <> "" Then ' La table est attachee
                ' Suppression
                Db.TableDefs.Delete Tdf.Name
                Db.TableDefs.Refresh
                
                ' Creation
                Set Newtable = Db.CreateTableDef(NomTable)
                Newtable.SourceTableName = NomTable
                Newtable.Connect = "MSAccess;PWD=mdp;DATABASE=" & arg_chemin
                
                ' Ajout de la table à la Db : ERREUR 'Pilote ISAM introuvable'
                Db.TableDefs.Append Newtable
            End If
            Set Tdf = Nothing
        Next I
        
        fRediriger_donnees = True
     
    End Function
    
    
    Sub donnees_locales()
        fRediriger_donnees ("C:\Documents and Settings\pc\Bureau\bd.mdb")
    End Sub

  9. #9
    Membre habitué Avatar de Currahee
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 157
    Points : 130
    Points
    130
    Par défaut
    La solution :

    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
     
    Sub maj_tableliees()
        maj_liaisons "D:\Ess\bd.mdb", "motdepasse"
    End Sub
     
    Function maj_liaisons(chemin As String, mdp As String)
     
        Dim I As Integer
        Dim Db As Database
        Dim Tdf As TableDef
     
        ' Base de donnees courante dans laquelle les tables liees sont a mettre a jour
        Set Db = CurrentDb
     
        ' Recherche des tables liees
        For I = 0 To Db.TableDefs.Count - 1
            Set Tdf = Db.TableDefs(I)
            If Tdf.Connect & "" <> "" Then ' La table est liee
                Tdf.Connect = "MS ACCESS;PWD=" & mdp & ";DATABASE=" & chemin
                Tdf.RefreshLink
            End If
            Set Tdf = Nothing
        Next I
     
    End Function
    Mon erreur était que je n'avais pas mis d'espace entre MS et ACCESS
    Je ne sais pas ce qu'est le pilote ISAM, mais une erreur du style "Pilote ISAM MSACCESS introuvable" m'aurait évité les recherches effectuées...

    Tdf.Connect = "MS ACCESS;PWD=" & mdp & ";DATABASE=" & chemin

    PS: Je ne suis pas l'auteur du topic, mais je pense qu'il est désormais RESOLU, mon code rajoutant juste en plus le paramètre mot de passe non présent dans le code solution donné au départ.

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

Discussions similaires

  1. [AC-2007] Modifier le chemin d'accès à une table liée
    Par Skootman dans le forum VBA Access
    Réponses: 1
    Dernier message: 09/06/2009, 14h47
  2. Modification du chemin des tables liées
    Par KonTiKI dans le forum VBA Access
    Réponses: 3
    Dernier message: 17/01/2008, 22h39
  3. Protection du chemin d'accès des images
    Par Dsphinx dans le forum Sécurité
    Réponses: 5
    Dernier message: 31/10/2007, 09h23
  4. Chemin d'accès à des images et Alerteur
    Par frederic_s dans le forum Deski
    Réponses: 2
    Dernier message: 30/11/2006, 12h19
  5. Chemin d'accès des fichiers dans des sous rep
    Par Le Veilleur dans le forum C++Builder
    Réponses: 4
    Dernier message: 17/11/2004, 14h37

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