I. Introduction▲ Nous allons utiliser dans ce tutoriel une base exemple disponi
I. Introduction▲ Nous allons utiliser dans ce tutoriel une base exemple disponible avec Access => Les Comptoirs. Cette base est disponible depuis Access dans l'arborescence de l'aide : Egalement disponible sur ce chemin => C:\Program Files\Microsoft Office\OFFICExx\SAMPLES. Pour Access97 il faut aller chercher dans le répertoire d'installationOffice\Samples II. Principe des bases frontales/dorsales▲ C'est le principe du Client / Serveur, d'un côté les données et de l'autre l'interface utilisateurs ou IHM. Base Dorsale : Base ne contenant que les tables. Généralement la base Dorsale est placée sur un Serveur connecté à un réseau. Base Frontale : Base contenant tous les Formulaires, les Requêtes, les Etats et les Macros. Cette base est placée sur les postes utilisateurs, elle aussi connectée au même réseau. III. Scinder une base▲ Access possède un outil très ludique permettant de scinder une base. Pour utiliser l'assistant il faut sélectionner Fractionner une base de donnéesdu menu outils Access 2003 Access 2007 Une fenêtre s'ouvre vous expliquant ce que va faire Access, c'est à dire déplacer les tables vers une base principale et les lier vers la base Frontale qui sera votre base actuelle. Sélectionnez Fractionner la base de données. Une fenêtre d'exploration s'ouvre vous demandant de renseigner le chemin où sera créée la base principale. Après avoir cliqué sur Fractionner, l'assistant effectue la création de la base principale et lie les tables, un message vous signale la bonne réalisation du travail de l'assistant. Dans la fenêtre de base de données nous pouvons voir ceci maintenant : La liaison au niveau des tables est représentée par une flèche située devant la table, ceci veut dire que cette table est liée à une autre base de donnée. La base dorsale ne contient que les tables partagées. Les tables temporaires doivent être situées sur la base frontale pour éviter tout conflit et garantir la version des données enregistrées temporairement. IV. Lier les tables manuellement▲ Nous venons de scinder une base Access sur le principe de frontale/dorsale, ceci présente un gros défaut : sa portabilité. Si pour une raison quelconque vous avez besoin de déplacer une ou les bases, toutes les liaisons ne seront plus conformes. Access possède une fonction permettant de redéfinir les liaisons manuellement. Le gestionnaire de tables liées (ou gestionnaire d'attaches) permet de changer le chemin de la liaison entre la Frontale et la Dorsale. Gestionnaire de tables liées (ou Gestionnaire d'attaches) - Access 2003 Gestionnaire de tables liées (ou Gestionnaire d'attaches) - Access 2007 Fenêtre du gestionnaire d'attaches Le gestionnaire est relativement simple d'utilisation, il suffit de sélectionner les tables à mettre à jour puis de cliquer sur le bouton Ok. Fenêtre du gestionnaire d'attaches Un message confirme si la mise à jour s'est bien effectué. Mise à jour des liaisons Ok Si Access ne trouve pas la base Dorsale car elle a été déplacée, une fenêtre d'exploration permettant de renseigner le nouveau chemin s'ouvre. Elle permet de sélectionner la base Dorsale et sur validation d'effectuer la mise à jour des liaisons entre la Dorsale et la Frontale. Renseignement du nouveau chemin de la Dorsale. La case à cocher "Toujours demander un nouvel emplacement" permet lors de la validation sur "Ok" de toujours ouvrir la fenêtre d'exploration pour renseigner le chemin de la base Dorsale. Sélection nouvel emplacement. Renseignement du nouveau chemin de la Dorsale. V. Ajout d'une table dans la base Frontale▲ Nous allons maintenant ajouter une nouvelle liaison à la base frontale. Pour notre exemple nous allons effacer la table Messagers de la base frontale et la recréer. En faisant cela nous venons juste d'effacer la liaison entre les deux bases. Pour recréer cette liaison nous allons ouvrir lafenêtre d'attaches des tables. Sélectionnez Lier les tables du menu Fichier Access 2003 Access 2007 Pour Access 2007, la fonction d'import ou de liaison de tables se trouvent sous le même bouton, pour les liaisons sélectionnez l'option "Lier à la source de données en créant une table attachée" Access 2007 Une fenêtre d'exploration s'ouvre vous demandant de sélectionner la base où se situe la table à lier Après avoir sélectionné la base où se situe la table et cliqué sur Attacher, la fenêtre d'attache s'ouvre il nous reste plus qu'à sélectionner la tableMessagers et cliquer sur OK VI. Tables non liées de la frontale▲ Il se peut que vous ayez besoin de créer une table temporaire, comme expliqué plus haut ces tables ne doivent pas être liées mais intégrée à la base Frontale. Nous allons maintenant créer une table. Cette table permettra de stocker toutes les tables liées de la base frontale. Nous utiliserons cette table dans le prochain chapitre. Créer une nouvelle table que l'on appellera tblTablesAttachees, celle-ci ne comportera qu'un champ : Nom Type TableAttachees Texte VII. Lier les Tables en VBA▲ VII-A. Fonction permettant de mettre à jour les liaisons▲ Nous allons aborder dans ce chapitre la liaison des tables par VBA. Nous parlerons des objets DAO (Data Access Objects), un excellent tutoriel parle de DAO Définition et manipulation de données avec DAO écrit par Tofalu. Pour ce code il est nécessaire de cocher la référence Microsoft DAO 3.x Object Library. Dans un premier temps nous allons créer un code permettant de connaître les tables qui sont liées, nous allons ensuite ajouter chaque table liée dans la table tblTablesAttachees. Pour cela nous utiliserons un attribut de l'objet TableDefs => dbAttachedTable D'autres attributs sont disponibles au paragraphe 4.3.2.1 du tutoriel DAO de Tofalu. Déclarations des variables : Sélectionnez 'Déclaration des variables Dim dbBase As DAO.Database Dim tbdTables As DAO.TableDef Dim rst As DAO.Recordset Instance des variables, dbBase correspond à la base en cours et rst ouvre la tabletblTablesAttachees dans un Recordset : Sélectionnez 'Instancie la base courrante Set dbBase = CurrentDb 'charge la table dans le Recordset rst Set rst = dbBase.OpenRecordset("tblTablesAttachees", dbOpenDynaset) Nous allons également inhiber les messages d'alertes : Sélectionnez 'Inhibe les messages d'alertes DoCmd.SetWarnings False Il faut vider la table tblTablesAttachees pour que l'on puisse la re-remplir avec les tables liées : Sélectionnez 'Vide la Tables contenant la liste des tables attachées DoCmd.RunSQL "DELETE * FROM tblTablesAttachees" Maintenant il faut écrire la boucle qui permet de parcourir toutes les tables de la base Frontale et d'ajouter seulement les tables liées dans tblTablesAttachees. Pour cela nous testons l'attribut de la table qui permet de dire si celle-ci est liée ou non =>dbAttachedTable. Pourquoi cette table ? C'est très simple, au lieu de lier toutes les tables, nous ne lierons que celles qui l'étaient. Sélectionnez 'Boucle Parcourant toutes les tables de la Bdd en cours For Each tbdTables In dbBase.TableDefs 'Teste l'attribut de la table pour savoir si c'est une table liée If tbdTables.Attributes And dbAttachedTable Then rst.AddNew 'Ajoute un enregistrements rst!TablesAttachees = tbdTables.Name 'Ajoute la table dans le Champs rst.Update 'Mise à jour End If Next tbdTables La table étant remplie il faut mettre à jour le Recordset. Ensuite il faut effectuer un test pour placer le pointeur d'enregistrement sur le premier enregistrement : Sélectionnez 'Mise à jour du Recordset après ajout des tables rst.Requery 'Teste la position du pointeur si il ne se situe pas en début de table If Not rst.BOF Then rst.MoveFirst 'déplacement du pointeur sur le premier enregistrement End If Maintenant mettons à jour les liaisons des tables contenues dans la tablestblTablesAttachees, pour cela on réalise une boucle qui tourne tant que nous sommes pas arrivé au dernier enregistrement. Nous définissons l'objet TableDefs en fonction de la table stockée dans tblTablesAttachees. En utilisant la propriétés Connect nous redéfinissons le nouveau chemin de la liaison. La propriété RefreshLink permet de mettre à jour la liaison. On efface l'enregistrement en cours dans la table tblTablesAttachees ceci pour avoir une traçabilité, prenons le cas où la procédure rencontre un problème l'administrateur de la base pourra connaître les tables qui n'ont pas été liées. Sélectionnez 'Boucle parcours de la table tant que l'on arrive pas sur le dernier. While Not rst.EOF 'Définition de l'objet TableDefs avec table stockées dans TablesAttachees With dbBase.TableDefs(rst!TablesAttachees.Value) 'Redéfini la propriété connect de la table avec la nouvelle base .Connect = ";DATABASE=" & strChmFichier 'Remet à jour la liaison de la table .RefreshLink End With 'Efface l'enregistrement de la Table rst.Delete 'Enregistrement suivant rst.MoveNext Wend Ensuite nous libérons les variables. On réactive les messages d'alertes. On affiche un message comme quoi tout c'est bien déroulé et on renvoi la fonction avec True. Sélectionnez 'Liberation des variables dbBase.Close Set dbBase = Nothing Set rst = Nothing 'Re-active les messages d'alertes DoCmd.SetWarnings True 'Affiche Message MsgBox ("mise à jour terminée") 'Renvoi la fonction à true LierTables = True Voici la fonction complète ayant comme paramètre le chemin de la nouvelle base principale et qui renvoie une valeur de type Boolean. Sélectionnez Function LierTables(strChmFichier As String) As Boolean '-------------------------------------------------------------------------- ------------- ' Procédure : Function ==> LierTables ' Auteur : Dolphy http://dolphy35.developpez.com/ ' Commentaires : Permet de remettre les liaisons en fonction du chemin sélectionné ' Lien vers Faq : néant '-------------------------------------------------------------------------- ------------- ' 'Déclaration des variables Dim dbBase As DAO.Database Dim tbdTables As DAO.TableDef Dim rst As DAO.Recordset 'Initialise le retour de la uploads/Management/ bases-de-donnees.pdf
Documents similaires
-
19
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Aoû 11, 2021
- Catégorie Management
- Langue French
- Taille du fichier 0.9964MB