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 ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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.
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
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.
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
de=" & ValeurCodeEnteteCommande) =0 Then 'Pas de détail
correspondant à la commande DoCmd.RunSQL "DELETE TableEnteteCommande WHERE ChampCodeCommande = " & ValeurCodeEnteteCommande End If
Cordialement. .
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
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
de=" & ValeurCodeEnteteCommande) =0 Then 'Pas de détail
correspondant à la commande DoCmd.RunSQL "DELETE TableEnteteCommande WHERE ChampCodeCommande = " & ValeurCodeEnteteCommande End If
Cordialement. .
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.
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.
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.