Chemin de la base dorsale

J’ai scindé ma base Access en deux pour l’installer en réseau (voir ici pour la procédure). Comment, dans la partie applicative (ou frontale) connaître le chemin de la base dorsale (les données) ?

Le problème

Le problème à bien prendre en compte est qu’une base frontale Access peut pointer vers plusieurs bases dorsales. Du coup, il n’y a pas de méthode « native » pour obtenir directement la base dorsale. Par contre, dans les faits, on a rarement 20 bases liées, mais plutôt 1 base frontale et 1 seule base dorsale. Si c’est le cas, l’astuce consiste à lire le chemin de liaison de l’une des tables de la base frontale : ce chemin est celui de la base dorsale !

Rappel
Si vous cherchez à savoir le nom de la base applicative, vous pouvez utiliser CurrentProject.Path et ses variantes (voir ici).

Un peu de code

Le chemin d’une table liée est donné par la propriété Connect de l’objet DAO.TableDef. Si une table pointe vers un autre fichier MDB (ou ACCDB sur Access 2007), cette propriété a pour forme :

;DATABASE=C:\...Base dorsale.mdb

Il nous suffit donc d’extraire ce qui suit le signe « =« . Voici une fonction VBA qui automatise le tout :

Pour que l’exemple fonctionne :

  • On suppose que la base frontale n’est liée qu’à une seule base dorsale (ou en tout cas, que vous ne souhaitez obtenir le chemin que d’une base dorsale).
  • On suppose que les liaisons se font entre fichiers natifs Access (MDB, MDE, ACCDB, ACCDE notamment). Si vous avez des liaisons ODBC, vous devrez aménager le code, puisque la propriété Connect n’est plus la même.
Important
L’exemple de code ci-dessus fait appel à la bibliothèque DAO (Microsoft DAO Object Library). Cette bibliothèque doit être associée à votre base de données pour que le programme fonctionne.Pour plus de détails sur les références, consultez cette page.

Pour utiliser la fonction…

  1. On suppose que vous avez recopié la fonction dans un module standard de votre base applicative (la base frontale, avec les liaisons de tables, pas la base dorsale qui contient les tables réelles).
  2. Créez par exemple un bouton de commande, sur un formulaire.
  3. Programmez l’événement Sur clic de ce bouton en y tapant :

Remplacez bien sûr tbl Clients par le nom d’une table significative de votre base.

Vous aimerez aussi...

4 réponses

  1. Julien dit :

    Merci pour ce code!
    Par contre, ça ne fonctionnait pas chez moi, puis j’ai tenté une petite correction.
    Dans le code du bouton, visiblement, le bon nom de la fonction serait:
    strChemin = CheminDorsale(« tbl Clients »)
    Voilà 🙂

  2. Hervé Inisan dit :

    dg78 > C’est possible de rétablir les liaisons en VBA : voir la fonction RetablirLiaisons sur cette page du forum. La fonction devra sans doute être adaptée si on doit faire la distinction entre les 2 bases dorsales, mais le principe est là.

  3. dg78 dit :

    Bonjour,

    J’ai une application qui fonctionne à la fois sur un réseau et en autonome sur un Tablet PC.
    J’ai coupé la base en trois : une frontale (Front.mdb) et deux dorsales (Back1.mdb et Back2.mdb).
    Lors du travail sur le réseau, Front1, placé sur un poste client, fait référence à Back1 et Back2 placés sur le serveur.
    En travail sur un Tablet PC, Front1, placé sur le disque C, fait référence à Back1 et Back2 placés eux aussi sur le disque C.

    Mon problème vient quand je modifie Front1 (un formulaire par exemple), et que je le réinstalle à la fois sur le poste client et sur le Tablet PC. Je dois supprimer les liaisons (une par une pour chaque table car Access 2003 ne permet pas une suppression globale) puis je lie les tables (là c’est possible de prendre d’un seul coup toutes les tables d’une base).

    Ma question : est-il possible de détacher puis ré-attacher les tables avec du code ? ou mieux de modifier par code le chemin des tables attachées ?

    Merci par avance

    Dominique

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *