Bonsoir,

Envoyé par
emirov
essayer de retelecharger ce fichier peut eter ac va marcher :
C’est bon.

Envoyé par
emirov
je n'ai pas compris ce que c'est Id_client quelles valeurs on y met vu que ce n'est pas N°_client.... ?
J’avais déjà précisé que la clé primaire d’une table ne doit pas être porteuse d’information que l’on puisse interpréter. Cette règle n’est pas absolue, mais il s’agit de prendre de bonnes habitudes dès le départ. Ainsi, que se passera-t-il quand l’utilisateur éprouvera le besoin de modifier le numéro de client 411003 parce qu’à son sens ce numéro n’est pas le bon ? Dans votre cas, le travail de garantie de la cohérence des tables est assez simple, car il s’agit seulement de remplacer ce numéro de client par le nouveau numéro dans la table Client et d’en faire autant dans la table Commande. Mais c’est là le hic, il y a double modification (dans votre cas, mais parfois, pour une modification d’une clé primaire, il peut y avoir de nombreuses tables impactées et ça devient moins drôle).
L’enjeu est donc de n’avoir que la seule table Client qui soit à modifier, pas la table Commande. Autrement dit, le numéro de client ne doit pas figurer dans cette dernière. On utilise alors un nouvel attribut, en l’occurrence Id_Client, qui figure à la fois dans les tables Client et Commande et qui a surtout pour propriété fondamentale de ne jamais changer de valeur. C’est Id_Client qui composera à lui seul la clé primaire de la table Client, tandis que N°_Client sera ravalé au rang de clé alternative. L’utilisateur pourra toujours accéder au client École Buridan via son numéro 411003 (voire modifier ce numéro), mais la navigation dans la base de données se fera par le canal de Id_Client. La valorisation de Id_Client est à confier à Access.
Si vous décidez de me suivre,
1) Pour modifier la structure de la table Client et la mettre à niveau :
a) En mode Création, désactivez la propriété clé primaire pour l’attribut N°_Client. Vérifiez que cet attribut est indexé avec l’option "sans doublons". Vérifiez que les nulls y sont interdits.
b) Ajoutez l’attribut Id_Client et utilisez le type de données NuméroAuto (Access se chargera par la suite de valoriser l’attribut, pour chaque client : 1, 2, 3, etc.) et faites-en la clé primaire de la table.
c) Regardez ensuite le contenu de la table Client, vous devriez voir les valeurs attribuées par Access à Id_Client.
2) Ensuite, il faut synchroniser la table Commande :
a) Ajoutez l’attribut Id_Client, en retenant le type numérique (entier long).
b) Exécutez une requête permettant de répercuter les valeurs de l’attribut Id_Client dans la table Commande. Par exemple :
1 2 3 4
| Update Commande
Set Id_Client = (Select Id_Client
From Client b
Where b.Num_Client = Numéro_du_client) |
En cas de problème, faites le travail à la main, il n’y en a pour longtemps, mais soyez vigilant.
c) Pour vérifier visuellement que les commandes sont affectées aux bons clients, exécutez une requête SQL du genre :
1 2 3
| Select Numéro_de_la_commande, No_Client, Nom_Client
From Commande, Client
Where Commande.Id_Client = Client.Id_Client |
(Vous aurez noté que l'on n'a même pas besoin d'afficher Id_Client qui reste invisible pour l'utilisateur.)
d) Quand tout est bon, supprimez la colonne Numéro_du_client de la table Commande.
A terme, Quand tout sera terminé pour la base de données, n’oubliez pas de déclarer les contraintes d’intégrité référentielle, en partant de l’icône Relations.
A ce sujet, voyez par exemple les manips faites avec Myogtha
Vous devriez arriver à un résultat qui ressemble à quelque chose comme ceci :
Partager