Temps nécessaire pour suivre cette leçon : Une petite demie heure
Pour suivre cette leçon, vous devez avoir suivi les leçons précédentes. Ou plus précisément, vous devez être en possession de la base de données ProFormation.mdb telle qu'elle était à la fin de la leçon précédente. Si vous n'êtes pas certain de l'avoir, vous pouvez la télécharger ici
Dans cette leçon, nous allons étudier les options complémentaires qu'offrent les relations. Nous allons pouvoir changer ou supprimer les pays dans la table T_Pays, et les voir instantanément se mettre à jour dans la table T_Client. |
Nous allons essayer : Ouvrez T_Pays, et remplacez Suisse par Suice. . Enregistrez (SHIFT ENTER si vous aviez oublié). Et voilà. Ca marche !
Bonne réponse ! Nous allons essayer de changer l'orthographe d'un pays dont un ou plusieurs clients est originaire. Par exemple : Josiane Balasco vient de France. Restez dans T_Pays, et remplacez France par Frense, et Enregistrez.
D'accord... Eh bien, vous n'avez qu'à aller dans T_Client, chercher Josiane Balasco, et remplacer son France par Frense, et puis voilà !
Vous avez raison. Ceci dit, ça tombe bien qu'on ne puisse pas changer l'orthographe de France, puisque c'est la bonne orthographe. C'est quand même ce qu'on voulait, non ?
Qu'est-ce qui nous ennuie ? Les relations ? Eh bien vous n'avez qu'à les supprimer ! Cherchez tous les clients qui viennent de France, les remplacer par "République Française" à la main (Ou utiliser Edition/Remplacer), et, à la fin, remplacer France par République Française dans la table T_Pays ! Ainsi, les 2 tables correspondront à nouveau, et vous pourrez réinstaller la relation avec intégrité référentielle ! Vous suivez ?
Allez, je vous donne l'astuce de la mort-qui-tue : Nous allons utiliser notre "Suice". Un peu plus haut dans la leçon, vous avez changé "Suisse" en "Suice". Vous n'avez pas eu de problème puisqu'aucun client ne provenait de Suisse - Ni de Suice d'ailleurs.
Allez dans T_Client, et définissez (par exemple) 3 clients comme provenant de Suice : .
Maintenant, essayez de rectifier l'orthographe de Suice en Suisse pour, par exemple Juliette Griko.
Oui. Maintenant, quittez T_Client, allez dans T_Pays, et changez Suice en Suisse. Vous pouvez ?
L'astuce consiste à quitter la table T_Pays, et aller dans Outils/Relations. Cliquez 2 fois sur la relation qui lie Pays de T_Pays à PaysOrigine de T_Client. Cochez "Mettre à jour en cascade les champs correspondants" :. Cliquez sur OK, et quittez les relations.
Exactement. Lorsque vous irez dans T_Pays, et que vous changerez Suice en Suisse, Access, discrètement, changera tous les "Suice" de T_Client en "Suisse" (En l'occurrence : Juliette Griko, Jean-Paul Belmondos et Jules Martin).
Nous allons essayer : allez donc dans T_Pays, et Changez Suice en Suisse. Quittez T_Pays, et retournez dans T_Client : Regardez les 3 clients sont devenus "Suisse" :
Effectivement, ça ne marche pas dans ce sens là. C'est seulement dans la table du côté 1 que ça marche : . C'est logique quand on y réfléchit...
Non. Pas du tout ! En fait ce ne serait pas possible. Il y aurait à nouveau l'intégrité référentielle qui nous empêcherait de le faire. Essayez. Effacez "Suisse" de T_Pays. Vous obtenez le message d'erreur suivant :
Absolument ! D'ailleurs, si vraiment vous voulez supprimer la Suisse, vous n'avez qu'à supprimer tous les clients qui viennent de Suisse, et alors, Access vous laissera supprimer Suisse de T_Pays puisqu'il n'y a alors plus de clients correspondants.
Oui, on peut. Par exemple, imaginons que vous commercialisez des médicaments, et que soudain, une nouvelle loi (suisse justement) interdit complètement la vente par correspondance de médicaments... Du coup, vous pouvez rayer de votre table clients tous vos clients suisses. Voici la marche à suivre :
Oh surprise ! Il y a 3 clients en moins : Les 3 suisses (Sans jeu de mots...) :
Et bien entendu, les IDClient qui sont des numéros automatiques ne se suivent plus, mais ça vous vous en doutiez. (revoyez la leçon sur les NuméroAuto (13) si vous avez besoin de vous rafraîchir la mémoire)
Oui. Il faut avoir la tête bien sur les épaules, et déterminer les implications de vos choix ! C'est à vous de voir comment vous désirez qu'Acecss réagisse lorsque vous supprimez un enregistrement dont un champ est lié à une autre table : Voulez-vous simplement un message d'erreur qui vous informe que ce n'est pas possible, ou alors un simple message d'attention comme nous venons de le voir ? Vous constaterez avec l'expérience que ça dépend des cas.
Il faut observer chaque relation avec soin, et définir chaque option de relation en toute connaissance de cause. Il faut imaginer la base de données une fois terminée, et se poser la question à chaque fois : Est-il judicieux d'établir une relation, faut-il lui appliquer une intégrité référentielle, et est-il nécessaire, recommandé, ou interdit de "Mettre à jour en cascade les champs correspondants" et/ou "Effacer en cascade les enregistrements correspondants". Notez qu'il n'est pas possible de demander des options pour une relation qui n'a pas d'intégrité référentielle. |
Pour voir les solutions, il vous suffit de sélectionner le questionnaire ci-dessus : 3 petites étoiles *** apparaîtront en face des bonnes réponses. |
Nous allons faire un exercice amusant qui va bien illustrer ce concept de modification et de suppression des données en cascade. Nous allons lier 3 tables l'une à l'autre. Vous allez constater 2 fautes d'orthographe : Belgike et Europpe. Les voici (Créez une base de données Intercontinental.MDB dans laquelle vous créez ces 3 tables) avec les tables suivantes : T_Client
T_Pays
T_Continent
Une fois ces 3 tables créées, il s'agit de les relier entre elles...A vous de voir quels champs de quelles tables se lient avec quels champs de quelles autres tables... Une fois qu'elles sont liées (Avec intégrité référentielle évidemment !), il s'agit de donner les options nécessaires pour corriger Belgike et Europpe (Bien évidemment, il doit suffire d'écrire UNE SEULE fois Belgique pour que la correction se fasse automatiquement partout. Même commentaire pour Europpe !) Par contre, il NE DOIT PAS être possible
d'effacer un pays dont au moins un client est d'origine (Ici, il s'agit
de Belgique, France, Chine et Japon). Une fois tout ce travail terminé,
quels sont les continents que vous pouvez effacer ? Téléchargez la solution de l'exercice ici (Pour tester la solution, il suffit de changer Belgike en Belgique dans la table T_Pays, et Europpe en Europe dans la table T_Continent, pour constater que c'est possible et que les modifications sont répercutées dans les tables correspondantes. Et vous ne pouvez pas effacer Belgique ni France ni Chine ni Japon dans T_:Pays, car des clients correspondent) |
Si vous n'êtes pas tout à fait certain d'avoir suivi correctement toutes les étapes de cette leçon, vous avez la possibilité de télécharger ici la version de ProFormation.mdb exactement dans l'état ou elle devrait être à la fin de cette leçon.
Avez-vous une question technique
concernant cette leçon ? Cliquez
ici !
Une remarque sur cette leçon ? Un problème
? Une erreur ? une ambiguité ? Soyez
gentil de m'en informer