Importation de données – Episode 2
On continue notre scénario d’importation de données dans Access. Dans cet épisode, nous allons tâcher d’identifier les nouvelles couleurs fournies par le fichier texte, pour les injecter dans la table… des couleurs.
Si vous avez manqué le début…
Ce feuilleton a commencé par cet article :
Hé oui, les épisodes se suivent dans l’ordre sur self-access.com, on n’est pas sur TF1 ni M6 ! 🙂
La fois précédente, nous en étions restés à ce résultat :
Les problèmes
Si vous vous souvenez, le fichier texte que nous avons importé dans Access comporte des couleurs, avec quelques défauts :
- La couleur est donnée sous forme de texte, alors que dans Access, le champ
[tbl Voitures].[Id Couleur]
est un Numérique/Entier long. - Certaines couleurs fournies n’existent pas dans la table actuelle des couleurs, il va falloir les créer.
- Par contre, il ne faut pas recréer une couleur qui existe déjà, comme le rouge.
On va donc devoir isoler les couleurs nouvelles (et seulement elles), pour les injecter dans la table tbl Voitures Couleurs
.
Etape 1 : mise en place de la requête
- Commencez par créer une requête basée sur les tables
tbl Voitures TEMP
(la table temporaire créée par importation) ettbl Voitures Couleurs
(la table qui donne la nomenclature des couleurs). - Reliez le champ
Coloris
(tabletbl Voitures TEMP
) au champNom Couleur
(tabletbl Voitures Couleurs
). Il s’agit bien de 2 champs Texte, sur lesquels on souhaite trouver des correspondances.
Coloris
et Id Couleur
: ces champs sont de types différents (un nombre, un texte). De toute façon, Access vous le signalera dès que vous exécuterez la requête !- Glissez sur la grille de requête tous les champs des 2 tables.
- Exécutez la requête.
Etape 2 : réglage de la jointure
Petit problème : le résultat de votre requête n’affiche pas toutes les voitures de la table temporaire. En y regardant bien, seules les voitures qui ont une couleur existante (dans la table des couleurs) sont affichées.
Le phénomène est normal : nous avons relié les 2 tables sur un champ et, par défaut, Access n’extrait que les lignes de chaque table pour lesquelles il y a correspondance (en SQL, il s’agit d’une jointure interne, ou INNER JOIN
).
Mais ici, nous souhaitons toutes les lignes de la table temporaire Voitures, et les couleurs associées… s’il y en a. Pour modifier ce comportement :
- Double-cliquez sur le trait qui relie les tables.
- Dans la boîte de dialogue, faites le choix 2 (dans notre cas). Après validation, une flèche part de
tbl Voitures TEMP
verstbl Voitures Couleurs
. Ce qui rappelle qu’on souhaite TOUTES les voitures, et ÉVENTUELLEMENT les couleurs associées.
- Exécutez la requête. Ça se présente mieux, non ?
Etape 3 : liste des nouvelles couleurs
Dans notre nouvelle liste, nous obtenons toutes les voitures importées, avec un Id Couleur
et un Nom Couleur
lorsque ces voitures ont une couleur déjà référencée. Sinon, Id Couleur
et Nom Couleur
valent Null
.
- Pour éliminer les voitures dont la couleur est référencée, ajoutez le critère
Null
sous le champId Couleur
, par exemple.
- Il me reste encore 3 voitures bleues, et 1 noire. Il faut éliminer les doublons. Pour cela :
- Faites un clic du bouton droit sur le fond de la requête (1).
- Choisissez Propriétés (2) dans le menu contextuel.
- Dans la fenêtre Propriétés, réglez
Valeurs distinctes = Oui
.
- Exécutez la requête. Argh, ça ne marche pas vraiment ! Les doublons sont toujours affichés…
Pas de problème ici non plus : c’est un comportement normal de la requête. Les valeurs distinctes s’appliquent à tous les champs de chaque ligne : Code / Marque / Modèle / Coloris
et les autres. Comme tous les codes
(colonne 1) sont différents, toutes les lignes ressortent encore.
Il ne faut conserver que les champs sur lesquels la distinction doit être faite. Dans notre cas, gardez seulement Coloris
sur la grille de requête. Gardez aussi le champ Id Couleur
qui contient un critère. Votre requête finale doit ressembler à ça :
Et après exécution, vous devriez obtenir ceci :
Vous venez de réussir à isoler les couleurs qui ne sont pas encore référencées dans la nomenclature des couleurs. On va pouvoir transférer ces données dans tbl Voitures Couleurs
… Mais ça, ce sera au prochain épisode !