COMPETENCES |
Créer une relation un à un |
|
OBJECTIFS |
- Requête création de table |
|
Les requêtes actions |
|
|
- Requête suppression |
|
|
|
|
- Requête Ajout |
|
|
|
|
- Requête mise à jour |
CAS PAPETIERE- 5ème partie
LES REQUETES ACTIONS
CONNAISSANCES DE BASE
Les requêtes action permettent de modifier
les données dans les tables alors que les requêtes sélection et opération ne
modifient en rien les données stockées dans les tables.
Elles sont de quatre types :
Création
de table |
Permet
de créer une nouvelle table à partir des enregistrements répondant à un
critère de sélection |
Ajout |
Ajoute
le contenu des enregistrements correspondant au critère de sélection à une
table existante (ou nouvelle) |
Mise
à jour |
Permet
de mettre à jour le contenu d’un ou plusieurs champs pour les enregistrements
sélectionnés correspondant au critère de sélection |
Suppression |
Permet
de supprimer les enregistrements correspondant au critère de sélection |
Pour créer
une requête action, il faut :
· créer une requête sélection (ou opération) pour sélectionner les
enregistrements
· Afficher le résultat de la requête sélection (pour contrôle)
· Transformer la requête sélection (ou opération) en requête action par le menu Requête ou par les boutons de la barre
d’outils requête
· Exécuter la requête (menu Requête - Exécuter ou bouton éxécuter de la
barre d’outils)
DANGER : UNE
REQUÊTE ACTION MODIFIE LE CONTENU DES TABLES, PAR CONSEQUENT IL FAUT ÊTRE
RIGOUREUX QUANT AU CRITERE DE SELECTION
le theme
Dans la table
CLIENT de la base de données PAPETIERE.MDB figure le champ ENCOURS (contenant
le montant du crédit accordé aux clients). Ce champ constitue une donnée de
situation (au même titre qu’un solde de compte ou un stock) et doit être
régulièrement mis à jour. Par conséquent, vous allez :
· créer AUTOMATIQUEMENT par requête une table « ENCOURS DE
CREDIT » comprenant les champs suivants :
- CODECLI
- ENCOURS
· ensuite supprimer le champ ENCOURS de la table CLIENT
· enfin établir une relation entre la table CLIENT et la table ENCOURS DE
CREDIT
Plutôt que de
créer la structure de la table ENCOURS DE CREDIT, vous allez créer une requête
Création de tables :
1.
Cliquez sur l’onglet Requête
puis sur le bouton Nouveau
2.
Cliquez sur le bouton puis
sélectionnez la table CLIENT
3.
Faites glisser les champs CODECLI et ENCOURSCLI dans la grille d’interrogation.
4.
Visualisez le résultat de la requête Sélection(bouton )
(vous devez avoir 17 enregistrements et 2 champs)
5. En mode création de requête,
déroulez le menu Requête - Création de table ou cliquez sur le bouton Type
de requête puis sur le bouton
6.
Dans la boîte de dialogue Requête
création, saisissez le nom de la
nouvelle table : ENCOURS DE CREDIT
7.
Exécutez la requête (Menu Requête - Exécution ou bouton Exécuter de la barre d’outils Requête)
Un message d’alerte vous informe que 17 enregistrements vont être collés dans
une nouvelle table :
Confirmez alors en cliquant sur Oui
8.
Enregistrez la requête sous le nom Création table Encours et fermez-la (la requête évidemment !)
A |
ttention, si vous tentez une deuxième éxécution de la requête Création,
Access affichera un message d’erreur car la table ENCOURS DE CREDIT a été créé
lors de la 1ère éxécution. Pour signaler le danger, Le nom des requêtes action
(dans la liste des requêtes) est précédé d’un point d’exclamation
9.
Vérifiez l’existence de la table ENCOURS DE CREDIT dans la liste des
tables.
10.Vérifiez la structure de la table (
affichez la table ENCOURS CREDIT en mode création : les propriétés des champs CODECLI et ENCOURS sont les mêmes que dans la table CLIENT. Mais ACCESS n’a
pas défini de clé primaire. par conséquent définissez
la clé primaire pour le champ CODECLI
Comme
le champ ENCOURS fait partie d’une nouvelle table, vous devez le supprimer de
la table CLIENT :
1.
Ouvrez
la table CLIENT en mode création,
2.
Sélectionnez la ligne de champ : ENCOURS
3.
Supprimez le champ
Comme
UN client n’a qu’UN seul encours de crédit et inversement, la relation entre
les tables CLIENT et ENCOURS DE CREDIT sera du type UNE à UNE. Le champ commun
au deux tables est CODECLI.
travail a faire :
Créez
la relation entre les deux tables.
Le coin des Pros
La
structure de la table CLIENT ayant été modifiée, les requêtes, les formulaires
ou les Etats fondés sur la table CLIENT ne se mettent pas automatiquement à
jour. Conséquence : si une requête, un état ou un formulaire utilise le champ ENCOURS,
il faudra faire des modifications
APPLICATION :
Au
cours des TD précédents(CAS PAPETIERE : 3ème partie -
UTILISER ACCESS AVEC PLUSIEURS TABLES - Troisième sous-partie : Créer une
zone de liste modifiable)
vous
avez créé le formulaire « 2
Saisie/Modification des clients » fondé sur la requête « REQUETE
FORMULAIRE CLIENT »
Comme
ces éléments font référence au champ ENCOURS, vous allez les modifier « en
cascade »
1.
Modifier la requête « REQUETE FORMULAIRE CLIENT »
2.
Dans
la requête en mode création, supprimez
le champ ENCOURS qui n’est plus
valide
3.
Ajouter la table ENCOURS DE CREDIT
(menu Requête - Ajouter une table)
4.
Faites glisser le champ ENCOURS (de la table ENCOURS DE CREDIT) vers la grille
d’interrogation avant le champ PLAFOND
5.
Vérifiez le résultat de la requête
6.
Enregistrez et fermez la requête.
7. Modification du formulaire
« 2 Saisie/Modification des clients » :
·
Ouvrez
ce formulaire en mode Modification/création
·
Vérifiez la source du contrôle « ENCOURS » :
J
Sélectionnez le contrôle ENCOURS
J
Affichez
les propriétés du contrôle (Menu Affichage propriétés) En principe, la source
correspond au champ ENCOURS de la requête donc il n’y a rien à faire.
Passez à la rubrique
« Le coin des experts » OU fermez le formulaire puis passez
directement au II CREATION D’UNE REQUETE MISE A JOUR, D’UNE REQUETE
SUPPRESSION
Le coin des
experts
Profitons
du formulaire « 2 Saisie/modification des clients » pour découvrir de
nouveaux « trucs » :
Le
champ ENCOURS représente une Donnée
de situation (comme cela a pu être dit précédemment) dont la valeur augmente à
chaque nouvelle commande et diminue avec les réglements reçus des clients). Par
conséquent, ce champ doit être mis à jour avec une requête action.
Pour
éviter que l’utilisateur du formulaire ne saisisse une valeur dans le champ
ENCOURS, on va le protéger en paramétrant certaines propriétés :
1.
Sélectionner le contrôle ENCOURS (si ce n’est pas déjà fait)
2.
Affichez la fenêtre des propriétés
(si ce n’est pas déjà fait)
3.
Paramétrez les propriétés indiquées
ci-dessous :
Remarque :
- La propriété Visible : permet de cacher un
contrôle ou de le rendre visible
- La propriété Afficher a pour options :
*
Toujours : le contrôle est affiché tant à l’écran qu’à l’imprimante
*
A l’écran : le contrôle est affiché à l’écran mais n’est pas imprimable
*
A l’impression : le contrôle est imprimable mais n’est pas affiché à l’écran
5. Vérifiez les modifications en affichant le formulaire en mode
Formulaire et essayez de changer la valeur du champ ENCOURS
AU PREALABLE :
Vous allez effectuez une copie de la base de
données PAPETIERE.MDB et travailler sur cette copie.
Plutôt que d’utiliser l’explorateur de WINDOWS,
vous allez utiliser la commande COMPACTER d’ACCESS. Cette commande permet de
réduire la taille d’une base de données. Le compactage se fait dans un nouveau
fichier.
PROCEDURE :
1. Fermez la base de données
PAPETIERE.MDB (indispensable)
2. Activez le menu Fichier -
Compacter une base de données ACCESS affiche une première boîte de dialogue
dans laquelle vous sélectionnez le nom de la base à compacter soit PAPETIERE.MDB sur le lecteur A:
3. Dans la deuxième boîte de
dialogue Compacter sous... saisissez le nom de la base compactée :
PAPETIERERAC.MDB
Une
fois l’opération achevée, ouvrez la base de données PAPETIERERAC.MDB, c’est
dans cette base de données que vous allez effectuer diverses requêtes action.
Le
directeur commercial de la société PAPETIERE a décidé de majorer de 10% le prix
unitaire des articles de papeterie. Vous êtes chargé de modifier les prix
unitaires.
Plutôt
que de calculer manuellement les prix unitaires pour les articles de papeterie et de les saisir vous allez, grâce
à une requête Mise à jour, faire la modification automatiquement.
MODE
OPERATOIRE :
1.
Créer une nouvelle requête fondée
sur les tables PRODUITS et CATEGORIE
2. Faites glisser les champs CODEART, DESIGNART, LIBELLECAT et PUHT
3.
Mettez
le critère : Papeterie pour le champ LIBELLE
CATEGORIE
4.
Visualisez
la requête en mode Feuille de données pour vérifier que vous n’avez que les
enregistrements relatifs aux articles de papeterie
5. En mode création, sélectionnez le type de requête « Mise à jour » dans le menu requête (ou cliquez sur le bouton
6.
Dans
la grille d’interrogation, saisissez la formule suivante sur la ligne
mise à jour et en dessous du champ Prix unitaire :
[PUHT]*1.10
7.
Exécutez la requête (Menu Requête Exécuter et visualisez le résultat : les prix ont
augmentés de 10% (de 12,60 F ils sont passés à 13,86 F)
Avant exécution de la requête
Ramette papier multi
usages |
45.00 F |
Papeterie |
Papier qualité photo /20 |
58.00 F |
Papeterie |
Après
exécution de la requête
Ramette papier multi
usages |
49.50 F |
Papeterie |
Papier qualité photo /20 |
63.80 F |
Papeterie |
8. Enregistrez la requête sous le nom : REQ
MISE A JOUR TARIF
9.
Fermez la requête
10.Exécutez de nouveau la requête : Que se passe-t-il ?
On
veut supprimer la commande n° 4 (qui a été annulée par le client) :
1. Créez une nouvelle requête fondée
sur la table commande
2. Faites glisser tous les champs
3. Saisissez le critère de sélection en
dessous du champ NOCOM : 4
4. Visualisez la requête
NOCOM |
DATECOM |
CODECLI |
00004 |
19/03/2001 |
6 |
5. En mode création, activez
le menu Requête – Suppression ou cliquez sur le bouton
6. Exécutez la requête. Un message vous
informe que la suppression va être définitive :
Confirmez
la suppression en cliquant sur oui
Mais
un message d’erreur s’affiche :
Annulez
l’opération en cliquant sur le bouton Non
Remède :
Lors
de la création des relations entre la table commande (côté UN de la relation)
et la table LIGNE COMMANDE (Côté PLUSIEURS) Vous avez demandé à ACCESS d’appliquer
l’intégrité référentielle : Pour pouvoir supprimer une enregistrement de la
table côté UN, il faut d’abord supprimer les enregistrements liés de la table
côté PLUSIEURS.
Dans
l’exemple il faudrait créer deux requêtes :
- la première pour supprimer
les enregistrements de la table LIGNE COMMANDE pour lesquels le champ NO COM=4
- la deuxième pour supprimer
les enregistrements de la table LIGNE COMMANDE pour lesquels le champ NO COM=4
C’EST LOURD A FAIRE !
Heureusement, il existe une autre possibilité :
·
Enregistrez la requête sous le nom : REQ SUPPRESSION D’UNE COMMANDE
·
Fermez la requête
·
Cliquez sur le menu Edition - Relation
·
Double cliquez sur la relation (sur le
trait) entre COMMANDE et LIGNE COMMANDE
·
Cochez la case Effacer en cascade (ainsi quand on supprimera une
commande, toutes les lignes de commandes seront automatiquement supprimées)
J
Validez puis fermez la fenêtre Relation
J
Dans
la fenêtre Base de données, sélectionnez la requête REQ SUPPRESSION
D’UNE COMMANDE
J
Exécutez la requête en cliquant sur le bouton Ouvrir (La suppression est
effective)
J
Ouvrez
successivement les tables COMMANDE et LIGNE COMMANDE pour vérifier que la
commande n° 4 a bien été supprimée.