OVH Cloud OVH Cloud

Question de debutant

3 réponses
Avatar
Frederic
Bonjour le NG;

J'ai deux tables liees sembables a celle de Northwind cad
Commande (Primaire) et details_commande (secondaire), et
je voudrais eviter qu'une personne qui cree un
enregistrement dans la table primaire ( Commande) soit
obligee de saisir un enregistrement dans la table
secondaire (detail de commande) , a defaut que
l'enregistrement primaire soit efface . En effet le
probleme que j'ai aujourd'hui c'est que j'ai des tas de
commandes sans details.
Je pense qu'il s'agit d'un parametrage des tables ou des
relations mais quoi exactement ?

Merci pour votre aide

frederic

3 réponses

Avatar
Xavier HUE
Bonjour frederic,

L'intégrité référentielle est certainement activée sur la
relation existante entre tes 2 tables.
Ceci permet de garantir qu'au moins un
enregistrement "Secondaire" existe, si un
enregistrement "Primaire" est créé.

Si tu veux que l'utilisateur puisse saisir dans "Primaire"
sans saisie immédiate dans "Secondaire", il te faut
désactiver l'intégrité référentielle sur ta relation.
Dans ce cas, tu devras t'assurer toi même de supprimer ton
enregistrement "Primaire" si aucun
enregistrement "Secondaire" n'a été saisie. Par exemple
dans l'évènement sur libération de ton formulaire de
saisie:
If DCount
("ChampCodeCommande","TableDetailCommande","ChampCodeComman
de=" & ValeurCodeEnteteCommande) =0 Then 'Pas de détail
correspondant à la commande
DoCmd.RunSQL "DELETE TableEnteteCommande WHERE
ChampCodeCommande = " & ValeurCodeEnteteCommande
End If

Cordialement.
Avatar
frederic
Bonjour Xavier,
Effectivement l'intégrité référentielle est activée sur la
relation existante entre mes 2 tables.
Mais elle ne produit pas l'effet que tu dis c'est plutot
le contraire :
Cette integrite referentielle garantie qu' un
enregistrement "Primaire" existe, si un
enregistrement "secondaire" est créé.

En effet si je saisi un detail de commande sans commande
jai bien un message d'erreur.
En revanche je peux enregistrer une commande sans detail
sans que Access ne renvoie de message. Or justement je
voudrais que Access ne permette pas cela et renvoie un
message.
" Votre commande ne contient pas de ligne ".

Merci pour ton aide

Frederic



-----Message d'origine-----
Bonjour frederic,

L'intégrité référentielle est certainement activée sur la
relation existante entre tes 2 tables.
Ceci permet de garantir qu'au moins un
enregistrement "Secondaire" existe, si un
enregistrement "Primaire" est créé.

Si tu veux que l'utilisateur puisse saisir
dans "Primaire"

sans saisie immédiate dans "Secondaire", il te faut
désactiver l'intégrité référentielle sur ta relation.
Dans ce cas, tu devras t'assurer toi même de supprimer
ton

enregistrement "Primaire" si aucun
enregistrement "Secondaire" n'a été saisie. Par exemple
dans l'évènement sur libération de ton formulaire de
saisie:
If DCount

("ChampCodeCommande","TableDetailCommande","ChampCodeComman

de=" & ValeurCodeEnteteCommande) =0 Then 'Pas de
détail

correspondant à la commande
DoCmd.RunSQL "DELETE TableEnteteCommande WHERE
ChampCodeCommande = " & ValeurCodeEnteteCommande
End If

Cordialement.
.



Avatar
Xavier HUE
J'ai fumé la moquette moi!

Cette integrite referentielle garantie qu' un
enregistrement "Primaire" existe, si un
enregistrement "secondaire" est créé.
Ca OK!



En revanche je peux enregistrer une commande sans detail
sans que Access ne renvoie de message. Or justement je
voudrais que Access ne permette pas cela et renvoie un
message.
Ca c'est à toi de gérer!


Un peu comme ce que j'indique dans ma première réponse.
Lorsque l'utilisateur cherche à quitter le formulaire de
saisie des infos concernant la commande (l'entête), il te
faut vérifier qu'au moins une ligne détail à été créées.
Avec DCount par exemple.
Ou bien en vérifiant qu'il existe au moins un
enregistrement dans le sous-formulaire de saisie du détail
(si tu as conçu ton écran de saisie avec sous-formulaire).

Plus de détail demain si tu le souhaites.
Cordialment.