On pourrait s'imaginer qu'il existe un rapport entre une liste déroulante et une relation.
En fait
A contrario, on peut aussi avoir deux tables liées entre elles (avec même l'intégrité référentielle) sans qu'il y ait de liste déroulante.
Suppression d'une liste déroulante
Faisons un test : détruisez la liste déroulante que vous avez faite sur PaysOrigine. C'est facile, il suffit de choisir Contrôle de l'affichage / Zone de texte dans ses propriétés :
Vous constaterez que toutes les autres propriétés de l'onglet Liste de choix ont disparu :
Lancez la table en mode saisie de données. Essayez maintenant d'écrire, par exemple, Argentine comme PaysOrigine de Patrick Bruel : à l'instant de l'enregistrement, vous aurez le message d'erreur que vous connaissez.
Vous devrez donc connaître les pays de T_Pays par coeur, pour pouvoir les inscrire ainsi sans aucune erreur !
En résumé : les listes déroulantes n'ont rien à voir avec les relations avec intégrité référentielle, mais il faut admettre que ces deux concepts fonctionnent sacrément bien ensemble.
Comme l'amour et le sexe, finalement .
Du coup, remettez la propriété Contrôle de l'affichage de PaysOrigine à Zone de liste déroulante : Mise à jour en cascade
Maintenant, il y a quelques contraintes liées à cette intégrité référentielle ! Essayez ceci :- Dans la table T_Client, Refaites glisser le champ PaysOrigine juste sous Prenom, et fermez T_Client
- Allez dans T_Pays, et ajoutez le nouveau pays Portugale (le e à la fin est une faute, mais faisons-là exprès)
- Fermez T_Pays, et retournez dans T_Client. Dites que Coluche et Di Caprio viennent du Portugale
Que faire ?
Nous savons que dans T_Client, si nous essayons d'enlever le e de Portugale, nous aurons un message d'erreur, puisque l'intégrité référentielle nous empêche d'avoir la moindre différence entre les deux tables !Et si nous nous rendions dans T_Pays pour retirer ce e à Portugale ? ... Vous pouvez essayer, mais vous aurez le même message d'erreur : comme des clients viennent de Portugale, pas question de modifier l'orthographe dans la table source non plus !
Que faire, que faire ???
On pourrait ajouter le nouveau pays Portugal (sans e) dans T_Client, et remplacer tous les Portugale par Portugal dans T_Client...On pourrait ! ... Mais si nous avions 2'000 clients portuguais, ce sera pénible
On pourrait aussi supprimer l'intégrité référentielle, ce qui nous permet denlever le e de Portugal dans T_Pays sans qu'Access ne dise rien, puis remplacer aussi les Portugale par Portugal dans les PaysOrigine de T_Client...
On pourrait ! ... Mais ça revient un peu à retirer la police le temps de commettre une malversation et la remettre juste après... C'est très moyen !
Il existe une solution vraiment plus efficace !
Fermez toutes les tables éventuellement ouvertes et allez dans les relations. Double-cliquez sur la relation T_Pays - T_Client.
Ca affiche les propriétés de la relation.
Cochez Mettre à jour en cascade les champs correspondants, et OK.
Allez dans T_Pays, et supprimez le e de Portugale. Fermez la table : il se laisse faire !
En fait, il vient de corriger l'orthographe de manière discrète et transparente dans nos 2 clients portuguais également ! Consultez T_Client pour vérifier si je dis vrai !
C'est donc une option bien utile !
Ca, c'était pour autoriser les modifications orthographiques.
Suppressions d'enregistrements en cascade
Mais que se passe-t-il si vous désirez carrément effacer Portugal de T_Pays ? Essayez ! Vous êtes gratifié de ce message d'erreur que vous connaissez.
En effet, c'est une autre histoire ! Corriger l'orthographe, c'est une chose ! Mais que faire lorsque l'enregistrement de référence n'existe carrément plus ?Vous pourriez vous dire qu'Access n'a qu'à simplement effacer Portugal de Coluche et de Di Caprio, et le tour est joué !
Oui, vous avez raison, mais non, Access ne fait pas ça.
Fermez vos tables et allez dans les relations.
Double-cliquez à nouveau sur la relation T_Pays - T_Client, et, cette fois-ci, toujours dans la même boîte de dialogue, cochez Effacer en cascade les champs correspondants, et OK.
Fermez les relations.Dans T_Client, nous avons actuellement : 11 clients, dont deux portuguais.
Fermez T_Client si vous l'aviez ouverte, et ouvrez T_Pays.
Et voilà ! Access vient d'effacer Portugal dans T_Pays, mais également nos deux clients portuguais !
Fermez T_Pays, et ouvrez T_Client pour vous en convaincre : T_Client n'a plus maintenant que 9 clients au lieu de 11 :
Dangers de la suppression en cascade
pas question d'annuler cette suppression ! Si vous aviez eu 23'000 clients portuguais, ils se seraient volatilisés sans autre forme de procès ! Inutile de dire que cette case à cocher est à utiliser avec précaution !
En résumé, vous pouvez avoir deux tables reliées entre elles - avec intégrité référentielle
ou - sans intégrité référentielle
- Mettre à jour en cascade les champs correspondants
et/ou - Effacer en cascade les enregistrements correspondants.
Aucun commentaire:
Enregistrer un commentaire