Sommaire
- Création de la table source pour la liste déroulante des pays
- Création d'une liste déroulante basée sur une table externe avec l'assistant
- Création automatique des relations (Déconseillée)
- Modification des données de la table source
- Résumé de la marche à suivre complète pour l'élaboration d'une liste déroulante basée sur une table externe
- Dysfonctionnements générés par l'utilisation de plusieurs tables en simultané
- La propriété de champ "Limité à liste"
Oui, alors justement, avec les pays, on ne peut pas faire une liste déroulante locale, comme on a fait dans la leçon précédente ? Pourquoi ?
Simplement, parce qu'il y en a trop ! Ce serait un véritable enfer de tout rentrer dans l'assistant liste de choix ! D'autant qur vous prenez le risque de placer 2 fois le même pays... Bref, ça ne va pas !Et si j'ai seulement besoin de quelques pays : France, Suisse, et Italie par exemple ?
Alors là, on peut établir une liste locale. Mais ce n'est plus le sujet. Nous imaginons que vous avez besoin de tous les pays du monde, à savoir :Açores (Portugal), Afghanistan, Afrique du Sud, Albanie, Algérie, Allemagne, Andorre, Angola, Anguilla, Antigua et Barbuda, Arabie Saoudite, Argentine, Arménie, Aruba (Pays-Bas), Australie, Autriche, Azerbaïdjan, Bahamas (Iles), Bahreïn, Bangladesh, Barbade, Belgique, Bélize, Bénin, Bermudes (Iles des), Bhoutan, Biélorussie, Bolivie, Bosnie-Herzégovine, Botswana, Brésil, Brunéi, Bulgarie, Burkina Faso, Burundi, Caïmans (Iles), Cambodge, Cameroun, Canada, Cap-Vert (Iles du), Chili, Chine, Chypre, Colombie, Comores, Congo, Cook (ILES), Corée du Nord, Corée du Sud, Costa Rica, Côte d'Ivoire, Croatie, Cuba, Danemark, Djibouti, Dominique, Egypte, Emirats Arabes Unis, Equateur, Erythrée, Espagne, Estonie, Etats-Unis, Ethiopie, Falkland (Iles), Fidji (Iles), Finlande, France, Gabon, Gambie, Georgie, Ghana, Gibraltar, Grèce, Grenade, Groenland, Guadeloupe, Guam, Guatémala, Guinée, Guinée-Bissau, Guinée-Equatoriale, Guyana, Guyane, Haïti, Honduras, Hong Kong, Hongrie, Inde, Indonésie, Iran, Iraq, Irlande, Islande, Israël, Italie, Jamaïque, Japon, Jordanie, Kazakhstan, Kenya, Kirghizistan, Kiribati, Koweït, La Réunion (Île De), Laos, Les Seychelles, Lesotho, Lettonie, Liban, Liberia, Libye, Liechtenstein, Lituanie, Luxembourg, Macédoine, Madagascar, Malaisie, Malawi, Maldives (Iles), Mali, Malte, Mariannes du Nord (Îles Des), Maroc, Marshall (Iles), Martinique, Maurice (Ile), Mauritanie, Mexique, Micronésie, Moldavie (Rép. de), Monaco, Mongolie, Mozambique, Myanmar, Namibie, Nauru, Népal, Nicaragua, Niger, Nigéria, Niue, Norvège, Nouvelle-Calédonie, Nouvelle-Zélande, Oman, Ouganda, Ouzbékistan, Pakistan, Palau (Iles), Panama, Papouasie-Nouvelle-Guinée, Paraguay, Pays-Bas, Pérou, Philippines, Pologne, Polynésie française, Porto Rico, Portugal, Qatar, République Centrafricaine, République Dominicaine, République Tchèque, Roumanie, Royaume-Uni, Russie (Fédération de), Rwanda, Sahara Occidental, Saint-Christopher et Nevis, Sainte-Lucie, Saint-Marin, Saint-Vincent et les Grenadines, Salomon (Iles), Salvador (El), Samoa Occidental, Sao Tome et Principe, Sénégal, Sierra Leone, Singapour, Slovaquie, Slovénie, Somalie, Soudan, Sri Lanka, Suède, Suisse, Surinam, Swaziland, Syrie, Tadjikistan, Taïwan, Tanzanie, Tchad, Thaïlande, Togo, Tonga (Ile), Trinité-et-Tobago, Tunisie, Turkménistan, Turks et Caïcos (ILES), Turquie, Tuvalu (Iles), Ukraine, Uruguay, Vanuatu, Vatican (Cité) (Saint-Siège), Venezuela, Vierges Américaines (Iles), Vierges Britanniques (Iles), Viêt-Nam, Yémen, Yougoslavie, Zaïre, Zambie, Zimbabwe
Ah oui... Ca fait pas mal !
Oui. Donc, comme nous ne pouvons pas faire aisément une liste déroulante locale, ce que nous allons faire, c'est carrément une table des pays, qui va contenir la liste exhaustive de tous les pays du monde (cette liste ci dessus en fait). Et une fois que nous aurons conçu cette table supplémentaire, nous verrons comment l'assistant liste de choix va puiser dans cette nouvelle table.Création de la table source pour la liste déroulante des pays
La première chose à faire est de créer cette fameuse nouvelle table. Vous savez comment on crée une nouvelle table, vous allez donc créer une nouvelle table que vous appellerez T_Pays, avec un seul champ : Pays :

Vous avez mis 2 fois la France... C'est normal ???
Qu'est-ce que vous en pensez ?Je dirais que non ! Si cette liste doit servir de base à la liste déroulante dans la table T_Client pour choisir le pays du client, je pense qu'il faudrait qu'il y ait un seul exemplaire de chaque pays.
Vous pensez bien. Donc ?Donc... Il faut faire attention à ne pas mettre 2 fois le même pays, évidemment !
Oui, Ici c'est facile : Nous avons seulement 5 pays, c'était vraiment simple de voir qu'il y avait 2 fois la France... Mais s'il y avait déjà 80 ou 100 pays, comment pourriez-vous être certain de ne pas entrer 2 fois le même ?La clé primaire ! Evidemment !
Voilà : Le champ pays devient la clé primaire de T_Pays !
On ne rajoute pas de NuméroAuto, qui serait une clé primaire
, comme dans T_Client ?
Surtout pas ! Sinon, vous auriez ceci : 
D'accord ! Pigé ! Donc c'est l'unique champ pays qui est aussi une clé primaire !
Absolument :
Apparté :
Il est possible d'avoir d'une part un champ défini en Clé primaire, comme par exemple IDPays, qui serait un NuméroAuto, et, également, le champ Pays qui, bien que n'étant pas défini en Clé primaire, exclut les doublons. Pour faire une telle chose, vous devez donc avoir un champ IDPays en NuméroAuto et en Clé primaire, et, dans les options du champ Pays, tout en dessous, dans les propriétés, vous avez une propriété Indexé que vous devrez mettre à "Oui - Sans doublons":
Ah ! OK. Hem... Bon, comme j'avais mis 2 fois la France, évidemment, maintenant, il ne me laisse plus mettre une clé primaire. Laissez moi 5 minutes pour régler le problème...
Prenez votre temps... N'oubliez donc pas qu'il vous faut d'abord retirer la clé, lancer la table en mode saisie de données, supprimer la 2ème France, revenir en mode création, et remettre la clé. Si vous avez un peu de peine, refaites la leçon sur la clé primaire (Leçon 13).J'y suis ! Je rentre tous les pays du monde dans T_Pays ?
Pas comme ça, non. Sinon, vous allez en avoir pour 3 heures. Mettez simplement :- Suisse
- France
- Belgique
- Italie
Maintenant, c'est fini. Quittez la table T_Pays
Retournez dans T_Client en mode Création.
Ajoutez un champ "PaysOrigine" :

A la place de texte, choisissez l'assistant liste de choix

Création d'une liste déroulante basée sur une table externe avec l'assistant
C'est MAINTENANT que ça change par rapport aux listes déroulantes locales vues dans la leçon précédente
Dans cette boîte de dialogue, choissez la première option : 
Dans cette boîte de dialogue, vous allez justement choisir la table qui contient tous les pays : C'est facile, c'est la seule table (à part T-Client). Cliquez dessus :

Dans cette boîte, vous devez cliquer sur la petite flèche


Ca sert à quoi ça ?
C'est dans le cas ou la table T_Pays avait contenu plusieurs champs : Par exemple, en plus du champ Pays, nous aurions pu avoir d'autres informations comme : NomDuChefDEtat, ProduitNationalBrut, Superficie, NombreHabitant, etc. C'est à dire des champs précisant des données sur chaque pays. Dans ce cas, pour notre liste déroulante, nous aurions seulement choisi le nom du pays, les autres champs ne nous auraient pas intéressésVous cliquez donc ensuite sur Suivant, et vous avez sous les yeux la représentation de votre table T_Pays :


Cliquez sur Suivant, vous arrivez enfin à la dernière étape :

Création automatique des relations (Déconseillée)
Cette boîte de dialogue apparaît.
Pourquoi ?
Parce que si vous répondez Oui, Access va établir une relation entre la table T_Client et T_Pays de lui-même, et je ne veux pas qu'il le fasse, parce que dans la leçon 16, nous allons étudier les relations, et il est mille fois préférable de les constituer soi-même que de laisser Access nous prendre par la main, et faire le travail à notre place!Nous n'avons pas encore vu ça, mais en plus, si vous aviez déjà créé une relation entre T_Client et T_Pays, Access vous l'aurait détruite pour en ajouter une de son cru si vous aviez répondu Oui. Pour l'instant c'est un peu du chinois, mais on aura l'occasion de longuement y revenir.
Bien. Pour voir ce que ça donne, lancez la table en mode Saisie de données, et essayez de choisir l'Italie pour le premier client (Clunton):

ATTENTION : Quand vous avez dans une table (Par exemple T_Client) un champ qui n'a pas le même nom que le champ dans une autre table (Je m'explique : Par exemple, vous avez PaysOrigine dans T_Client, mais il va puiser dans T_Pays, qui elle, contient un champ Pays - Vous voyez : Pays lié à PaysOrigine), Access va constater ceci, est va insidieusement lors de la création de la liste déroulante par l'assistant, remplacer le champ PaysOrigine par Pays dans votre table T_Client, pour que les champs des 2 tables aient le même nom. C'est un petit magouilleur, cet Access ! Parce que nous, on ne veut pas changer le nom de notre champ, même s'il est lié à une autre table. N'hésitez donc pas à bien vérifier qu'il ne vous change donc pas les libellés de vos champs, et s'il le fait, contrez-le en RENOMMANT encore le champ avec le libellé que VOUS voulez ! Non mais ! Il ne va pas non plus faire trop la loi, celui-là !!! Soyez attentif parce qu'il fait sa petite affaire très discrètement !!!
Modification des données de la table source
Le premier client, c'est Clunton. Il vient des USA, pas d'Italie...
Exactement. C'est ici que se montre la puissance de la liste déroulante basée sur une autre table : Voici comment ajouter USA à la liste :- Fermez T_Client
- Ouvrez T_Pays
- Ajoutez USA
- Fermez la table T_Pays
- Rouvrez la table T_Client en mode saisie de données
- Et voilà : Vous pouvez choisir maintenant USA pour Clunton :
C'est puissant ! Et donc, si on supprime un pays de T_Pays, on ne le verra plus apparaître dans la liste Pays de T_Client ?
Oui, bien entendu. Il sera ensuite aussi absent de la liste déroulante créée dans T_Client. Mais ça ne supprimera pas USA du client Clunton, il faut le savoir.Résumé de la marche à suivre complète pour l'élaboration d'une liste déroulante basée sur une table externe
On peut résumer la marche à suivre ?
Oui. Et pour bien comprendre, nous allons faire le résumé sous forme d'exercice. Nous allons dire que chaque client habite actuellement dans une ville, et nous allons choisir la ville dans laquelle il habite dans une liste déroulante qui va se baser sur une nouvelle table : T_Ville- Quitter T_Client
- Créer une nouvelle table
- Y installer un champ Ville
- NE PAS choisir liste de choix, mais laisser en texte (Erreur fréquente !)
- Définir ce champ Ville en clé primaire
- Lancer cette table en mode saisie de données
- Lors de l'enregistrement de la table, lui donner son nom : T_Ville
- Ecrire les villes suivantes :
Genève
Paris
New-York
Athènes - Fermer cette table T_Ville
- Rouvrir la table T_Client
- Insérer un champ Ville juste en dessous du prénom
- Choisir "Assistant liste de choix"
- Choisir la première option "Je veux que la liste de choix recherche les valeurs dans une table ou requête"
- Cliquer sur Suivant
- Cliquer sur T_Ville
- Cliquer sur Suivant
- Clqiuer sur la petite flèche > pour envoyer le champ ville de gauche à droite
- Cliquer sur Suivant
- Cliquer sur Suivant
- Cliquer sur Terminer
- A la question "La table doit être enregistrée afin que les relations puissent être créees", répondez NON !
Impeccable ! Ca marche.
Dysfonctionnements générés par l'utilisation de plusieurs tables en simultané
Oui. Mais ATTENTION : Lorsque vous changez quelque chose dans la table T_Ville, il est nécessaire que la table T_Client soit fermée. Je m'explique : Certains utilisateurs connaissent bien Windows, et savent très bien qu'il est possible d'ouvrir 2 tables à la fois :
- Ouvrez la table T_Ville et T_Client : Mettez les côte à côte comme dans l'exemple ci-dessus
- Ajoutez une ville dans la table T_Ville : San Fransisco
- Fermez T_Ville
- Allez dans la table des clients, et essayez de choisir San Fransisco pour un des clients (n'importe qui)
Oh Surprise ! San Fransisco ne se trouve PAS dans la liste ! - Fermez la table T_Client, et rouvrez-là
- Essayez à nouveau de choisir San Fransico : Ca marche cette fois !
Nous allons maintenant observer la différence au niveau de la table T_Client. Elle contient donc 2 listes déroulantes locales : Titre et EtatCivil, et 2 listes déroulantes basées sur une autre table : Pays et Ville. Comparons les options de Titre et Pays :


Vous constatez que dans "Origine Source", Titre contient "Liste Valeurs", et dans Pays "Table/Requête". C'est la première différence.
Ensuite, dans "Contenu", Titre est égal à : "Madame";"Mademoiselle";"Monsieur";"Maître", tandis que Pays vaut SELECT [T_Pays].[Pays] FROM T_Pays;
On peut facilement comprendre cette ligne écrite en langage dit "SQL" (Langage de requête structuré - Structured Query Language) : On sélectionne le champ [Pays] de la table [T_Pays]. Même si vous ne la comprenez pas parfaitement, vous voyez l'essence même de cette commande : C'est un appel Dynamique de T_Pays, et pas une simple liste toute bête Madame,Mademoiselle, Monsieur. Nous reviendrons ultérieurement sur ce langage SQL.
Mais en fait, ma table T_Pays n'est pas du tout complète... Je dois la remplir à la main ?
Non. Je tiens à votre disposition (Parce que vous m'êtes sympathique) la liste complète des pays, mais comme il s'agit d'un autre sujet (importation de données en provenance d'autres bases de données que nous aborderons à la leçon 18), je remet cette question à plus tard.
En faisant quelques tests, j'ai constaté que je pouvais, dans T_client, préciser que des clients viennent de "YoupiLand" par exemple (c'est à dire que je n'ai pas choisi dans léa liste déroulante, mais j'ai directement écrit ça :
). C'est normal
La propriété de champ "Limité à liste"
Oui. C'est parce que vous n'avez pas limité à liste : Oui :
Je me souviens ! Exactement comme dans les listes déroulantes locales, en fait ?
Oui, ça ne change pas. Ce n'est pas parce que votre liste de choix va chercher les valeurs dans une autre table que les règles changent.Mais alors, je pense à ceci : Si j'avais déjà entré pas mal de clients, et que je leur avait attribué un pays, jusqu'au moment ou je pense à "Limiter la liste : Oui", il y a peut-être plein d'erreurs orthographiques dans la sasie des noms de pays !
Oui. C'est pourquoi il est nécessaire de Limiter à liste : Oui. Mais en fait, il y a même avec Access la possibilité de "lier très fortement" T_Client et T_Pays de façon à être absolument certain que tous les pays qui sont saisis dans T_Client soient bel et bien répertoriés dans T_Pays. Ce sont les relations. Nous y reviendrons dans la leçon suivante.
Bon... Hem... On peut résumer ?
La liste déroulante rend de précieux services : C'est une des pierres angulaires d'Access. Il est INDISPENSABLE de bien les maîtriser car c'est vraiment la clé de voûte d'une base de données. Elle permet de chosir dans une liste une valeur plutôt que de la saisir manuellement. Il y a deux manières de faire une liste déroulante : Locale, et basée sur une autre table. La liste déroulante locale est destinée à proposer quelques choix (disons environ au maximum une dizaine, comme par exemple l'état civil ou le titre), tandis que la liste déroulante basée sur une autre table est plus difficile à mettre en oeuvre, mais est beaucoup plus puissante : Elle est utilisée quand elle propose beaucoup de choix (La ville ou le pays dans notre exemple). |
Avez-vous bien compris ?
|
Exercice
Je suis agent immobilier, et je loue des résidences de vacances. L'exercice consiste à créer une base de données qui s'appellera Résidence.MDB. Ce sera une base de données qui contiendra une table T_Residence, qui va contenir les renseignements suivants :
voici quelques données-exemples pour vous aider :
|
0 commentaires:
Enregistrer un commentaire