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 :

déplacer ma base mais pb avec tables liées


Sujet :

Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 65
    Points : 34
    Points
    34
    Par défaut déplacer ma base mais pb avec tables liées
    Salut,
    Sur mon poste, j'ai mon répertoire C:\Répertoire, qui contient ma base de
    données "OBS" mais aussi des sous-dossiers contenant les données d'autres BD.
    Ma base de données OBS contient de nombreuses tables liées dans ces sous
    dossiers.
    La base terminée je dois copier le répertoire entier (base et données) sur
    un réseau (ex Serveur:\Base\Répertoire), et bien sûr la liaison des tables ne
    suit pas.
    Y a t-il une solution pour ne pas refaire 'Gestionnaire des tables liées et
    redéfinir l'adresse de chaque table à chaque fois (genre faire un chemin relatif)?
    sachant que je vais tres régulierement la retravailler sur mon poste et
    refaire la manip souvent.

    --
    merci!

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 98
    Points : 61
    Points
    61
    Par défaut
    Tiens ca m interesse j ai le meme souci
    et pas trouvé comment mettr eles chemin relativement
    je suppose qu'il faut passer par VBA,mais quand à savoir ou les inscrires...

  3. #3
    Membre régulier

    Inscrit en
    Août 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 102
    Points : 119
    Points
    119
    Par défaut
    Perso je lance un petit formulaire au démarrage ("frmLinkToBD") dans lequel l'utilisateur entre le nouveau chemin vers la base. Puis il clique sur un bouton OK qui lance le code suivant (DAO – Access 97) :
    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
     
    Private Sub cmdOK_click()
     
        On Error GoTo er
     
        Dim Tabl As DAO.TableDef
        Dim NewPath As String
        NewPath = Me.txtNewPath
     
        For Each Tabl In CurrentDb.TableDefs
            If Tabl.Connect <> "" Then
                Tabl.Connect = ";DATABASE=" & NewPath
                Tabl.RefreshLink
            End If
        Next
        MsgBox "All linked tables have been successfully refreshed."
     
        DoCmd.Close
        DoCmd.OpenForm "MainForm"
     
    Exit Sub
    er:
        If Err.Number = 3044 Or Err.Number = 3024 Then
            MsgBox "File not found.", vbCritical
        ElseIf Err.Number = 3011 Then    'if a table is missing
            MsgBox "Table " & Tabl.name & " is missing. The installation failed.", vbCritical
        Else
            MsgBox "Error " & Err.Number & ": " & Err.Description
        End If
    End Sub
    Pour que ce formulaire ne s'ouvre que quand la base est déconnectée, je vérifie une des tables liées à l'ouverture de frmLinkToBD : si la table contient au moins un champ, c'est qu'elle est correctment liée et donc j'envoie directement le formulaire principal.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Form_Load()
     
    Dim LinkTest As Integer
     
    LinkTest = CurrentDb.TableDefs("tblPipingData").Fields.count
     
    If LinkTest > 0 Then
        DoCmd.OpenForm ("MainForm")
    End If
    End Sub
    Cette méthode a l'avantage d'éviter tous les messages d'erreur, mais bien sûr il y a plein d'autres manières de faire.
    Voir aussi la FAQ
    http://access.developpez.com/faq/?pa...#RetablLienTbl

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 65
    Points : 34
    Points
    34
    Par défaut
    Si j'ai bien compris: à l'ouverture de la base un petit form demande l'adresse de la base (d'ailleurs avec simplement une zone de texte et un bouton ok?).
    Mais est-ce que cette solution met à jour les liaisons vers les tables?? sachant que pour moi, les tables liées sont à plusieurs endroits différents du répertoire.

    merci
    (dsl je suis pas un pro du code )

  5. #5
    Membre régulier

    Inscrit en
    Août 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 102
    Points : 119
    Points
    119
    Par défaut
    Citation Envoyé par yoyoo
    Si j'ai bien compris: à l'ouverture de la base un petit form demande l'adresse de la base (d'ailleurs avec simplement une zone de texte et un bouton ok?).
    Oui c'est ça.

    Citation Envoyé par yoyoo
    Mais est-ce que cette solution met à jour les liaisons vers les tables?? sachant que pour moi, les tables liées sont à plusieurs endroits différents du répertoire.
    Le code ci-dessus marche si toutes les tables liées sont stockées dans la même base.

    Si elles sont réparties sur plusieurs bases, fais en sorte qu'il soit facile de voir pour chaque table où elle se trouve, par exemple en ajoutant un suffixe à leur nom (du genre tblFournisseur_BDachats). Non seulement ca rend les choses plus claires, mais aussi ca permet de faire facilement une variante du code ci-dessus:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For Each Tabl In CurrentDb.TableDefs
        If Tabl.Connect <> "" Then
            If InStr(Tabl.Name, "BDachats") > 0 Then
                Tabl.Connect = ";DATABASE=" & CheminAchats
            Else
                Tabl.Connect = ";DATABASE=" & CheminCompta
            End If
        Tabl.RefreshLink
    Next
    Pour ce qui est de prendre des chemins relatifs:
    on peut demander à l'utilisateur dans quel répertoire se trouvent les bases, et en déduire le chemin de toutes les bases :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Repertoire = Me.txtNewPath
    CheminAchats = Repertoire & "\Achats.mdb"
    CheminCompta = Repertoire & "\Comptabilité.mdb"

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 65
    Points : 34
    Points
    34
    Par défaut
    Ok j'essaierai tout ca, mais je pense que la methode des chemins relatifs sera la mieux adaptée car ma base est déjà pratiquement terminée donc les noms des tables déjà utilisés dans plein d'applications

    merci encore
    (et a la prochaine )

Discussions similaires

  1. Lenteur MDB avec tables liées sur clé USB
    Par chrisviper dans le forum Access
    Réponses: 7
    Dernier message: 15/12/2007, 10h52
  2. [Relations] Ajouter une relation avec table liée
    Par Jean-Philippe André dans le forum VBA Access
    Réponses: 1
    Dernier message: 30/10/2007, 14h09
  3. Héritage avec tables liées à une autre base
    Par b_steph_2 dans le forum Access
    Réponses: 13
    Dernier message: 27/02/2007, 11h17
  4. Base fractionnée : gestion des tables liées
    Par hannii dans le forum Access
    Réponses: 5
    Dernier message: 26/02/2007, 11h02
  5. BD avec tables liées
    Par dzouve dans le forum Access
    Réponses: 3
    Dernier message: 12/07/2006, 16h54

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