OVH Cloud OVH Cloud

Sous-formulaires et relations

17 réponses
Avatar
Jean-Marc
Bonjour à toutes et à tous,

Une question probablement simple pour certains, mais sur laquelle je butte :
Je dois faire une bdd pour saisir des points (numériques) qui se trouvent
dans des secteurs (numériques).
Il y a donc une table "PP" avec les infos sur les points et une table
"Secteurs" avec des infos sur les secteurs.
Les clés primaires sont NrPoint et NrSecteur
Toutefois, il existe des points à la frontière des secteurs. Ils sont donc
dans plusieurs secteurs.
J'ai créé un formulaire pour la saisie des points.
Dans ce formulaire, un sous-formulaire pour les secteurs dans lesquels se
trouvent ces points.

C'est LÀ le problème.
Lorsque je saisis un point, pas de pbl. Mais lorsque j'essaye de mettre un
numéro de secteur dans le sous-formulaire, je reçois invariablement le
message : "Modification non effectuée : risque de doublons dans le champs
index, clé primaire ou relation interdisant les doublons. Modifiez les
données des champs contenant les doublons, enlevez ou redéfinissez l'index
pour permettre les doublons et recommencez."
Je butte sur ce message depuis ce matin.
C'est quoi qui n'est pas correct dans les tables, dans ma relation ou dans
mon formulaire ?

Comme tous les numéros de secteurs sont déjà dans la table avec leurs
spécifications, j'ai une relation un à plusieurs où j'inclus tous les
enregistrements de la table PP et les enregistrements de la table Secteurs
pour lesquels les champs joints sont égaux.

Merci de vos z'avis z'avisés,
Jean-Marc

7 réponses

1 2
Avatar
Jean-Marc
Merci Dan

"Dan" a écrit dans le message
de news: 4486e31c$0$927$
Dans ce cas, tu peux verrouiller la saisie dans le form Secteurs : groupe
de propriétés Données du formulaire : Modif, Suppr, Ajout, Entrée de
données à Non...
Le sous-form servira juste à visualiser les points du secteur courant...

A+ Dan





Avatar
Dan
"Jean-Marc" a écrit dans le message de
news: hpBhg.25046$
C'est à peu près ce que j'ai fais, sauf la liste déroulante, puisque
chaque point peut-être attribué à plusieurs secteurs (s'il est sur la
frontière de 2 secteurs, il sert aux 2 secteurs et doit donc se retrouver
dans les 2). De même, chaque secteur contient plusieurs points.
Cela fonctionne, maintenant.

Mais là je suis à l'étape suivante et je bute sur autre chose.

Dans chaque secteur il y a un nombre de lots (un champs numérique dans la
table secteur)
Il existe des points avants et des points arrières (un champs oui/non dans
la table Points)

Pour qu'un secteur soit valide, il faut qu'il y ait au moins 1 point par 3
lots. Il faut aussi que 20% des points du secteur soient des points
arrières.
Je pensais créer 2 champs dans le formulaire Secteurs. Dans un champs,
serait écrit qu'il y a un point par X lots dans ce secteur et dans l'autre
champs, le pourcentage de points arrières, mais je bute la requête à
faire.



Bon...

Commençons par décomposer les prérequis de la validation d'un secteur :
- dans ton form Secteurs, crée 2 zones de textes : NbPoints_Total,
NbPoints_Arrières
- NbPoints_Total aura pour source une requête comptabilisant les points du
secteur
- NbPoints_Arrières aura pour source une requête comptabilisant les points
arrières du secteur

Requête : RNbPoints_Total
- basée sur la table Sectorisations
- critère secteur = Forms!Secteurs!CodeSecteur
- colonne Comptage : CompteDeCodePoint (option des opérations sur les
requêtes)

Requête : RNbPoints_Arrières
- basée sur la table Sectorisations liée à la table des Points
- critère secteur = Forms!Secteurs!CodeSecteur
- critère Arrière = oui
- colonne Comptage : CompteDeCodePoint (option des opérations sur les
requêtes)

Il restera à définir une procédure permettant de décider, à l'aide de tout
ça (les lots, le total des points, le total des points arrières), si ton
secteur est valide...

Ensuite, il faudra décider si tu fais le calcul de la validité du Secteur à
chaque affichage (SurActivation), ou bien si un traitement devra mettre à
jour un indicateur Secteur_Valide dans la table des secteurs...
La première hypothèse te garantit un indicateur à jour en permanence, mais
sera gourmande en temps d'affichage, la seconde sera plus rapide à
l'affichage, mais te fera courir le risque des suppressions dans la table
Sectorisations ou des modifications du nombre de lots...

On va y aller piano, si tu veux...
A+ Dan

Avatar
Dan
J'ai oublié :

Dans le form Secteurs, la zone de texte NbPointsTotal a pour source =
rechdom("[Comptage]";"[RNbPoints_Total]")
Pareil pour les points Arrières...

A+ Dan
Avatar
Jean-Marc
Bon, les requêtes sont faites.
Je n'ai pas eu de pbl pour la première, mais ça a été plus dur pour la
seconde. Je recevais toujours le nombre total de points dans le secteur,
mais j'ai fini par comprendre et c'est fait.
Maintenant, quand je crée les champs dans le formulaire secteur et que je
mets sa source sur le champs de la requête, je reçois #Nom ? dans le champs.
C'est quoi qui n'est pas correct ?
La requête fonctionne, mais je n'arrive pas à mettre le résultat dans le
champs.


"Dan" a écrit dans le message
de news: 4486e9e3$0$994$

"Jean-Marc" a écrit dans le message de
news: hpBhg.25046$
C'est à peu près ce que j'ai fais, sauf la liste déroulante, puisque
chaque point peut-être attribué à plusieurs secteurs (s'il est sur la
frontière de 2 secteurs, il sert aux 2 secteurs et doit donc se retrouver
dans les 2). De même, chaque secteur contient plusieurs points.
Cela fonctionne, maintenant.

Mais là je suis à l'étape suivante et je bute sur autre chose.

Dans chaque secteur il y a un nombre de lots (un champs numérique dans la
table secteur)
Il existe des points avants et des points arrières (un champs oui/non
dans la table Points)

Pour qu'un secteur soit valide, il faut qu'il y ait au moins 1 point par
3 lots. Il faut aussi que 20% des points du secteur soient des points
arrières.
Je pensais créer 2 champs dans le formulaire Secteurs. Dans un champs,
serait écrit qu'il y a un point par X lots dans ce secteur et dans
l'autre champs, le pourcentage de points arrières, mais je bute la
requête à faire.



Bon...

Commençons par décomposer les prérequis de la validation d'un secteur :
- dans ton form Secteurs, crée 2 zones de textes : NbPoints_Total,
NbPoints_Arrières
- NbPoints_Total aura pour source une requête comptabilisant les points du
secteur
- NbPoints_Arrières aura pour source une requête comptabilisant les points
arrières du secteur

Requête : RNbPoints_Total
- basée sur la table Sectorisations
- critère secteur = Forms!Secteurs!CodeSecteur
- colonne Comptage : CompteDeCodePoint (option des opérations sur les
requêtes)

Requête : RNbPoints_Arrières
- basée sur la table Sectorisations liée à la table des Points
- critère secteur = Forms!Secteurs!CodeSecteur
- critère Arrière = oui
- colonne Comptage : CompteDeCodePoint (option des opérations sur les
requêtes)

Il restera à définir une procédure permettant de décider, à l'aide de tout
ça (les lots, le total des points, le total des points arrières), si ton
secteur est valide...

Ensuite, il faudra décider si tu fais le calcul de la validité du Secteur
à chaque affichage (SurActivation), ou bien si un traitement devra mettre
à jour un indicateur Secteur_Valide dans la table des secteurs...
La première hypothèse te garantit un indicateur à jour en permanence, mais
sera gourmande en temps d'affichage, la seconde sera plus rapide à
l'affichage, mais te fera courir le risque des suppressions dans la table
Sectorisations ou des modifications du nombre de lots...

On va y aller piano, si tu veux...
A+ Dan




Avatar
Dan
Exécute ta requête et regarde les champs qu'elle t'affiche : tu dois
reprendre exactement le nom de la colonne qui comptabilise les points (dans
mon exemple, c'était Comptage)

A demain !!! Dan
Avatar
Jean-Marc
Dans le formulaire, j'ai créé un champs vierge et dans sa source J'ai
utilisé le générateur d'expression pour aller chercher le champs, mais je
reçois quand-même le message d'erreur dans le champs.
Je ne comprend pas.

Merci de ton aide et bonne soirée,
Jean-Marc

"Dan" a écrit dans le message
de news: 4486f1e9$0$848$
Exécute ta requête et regarde les champs qu'elle t'affiche : tu dois
reprendre exactement le nom de la colonne qui comptabilise les points
(dans mon exemple, c'était Comptage)

A demain !!! Dan



Avatar
Jean-Marc
Ca y est. J'y suis.

Merci beaucoup de ton aide qui m'a fait gagner un temps précieux, Dan,
Jean-Marc

"Dan" a écrit dans le message
de news: 4486ef61$0$866$
J'ai oublié :

Dans le form Secteurs, la zone de texte NbPointsTotal a pour source =
rechdom("[Comptage]";"[RNbPoints_Total]")
Pareil pour les points Arrières...

A+ Dan



1 2