Bonjour,
Je n’ai pas non plus compris à quoi servent : T_AWS, T_Process et T_Size.
Donc on disait que Table_Product ne contient pas de colonne Process.
Ton modèle pourrait être :
1° Voici comment raisonner pour construite la requête contenu de la zone de liste cboProcess.
Il s’agit de construire une requête
qui donne les No Process et leur intitulé, susceptibles d’être choisis.
Les codes sont nécessairement ceux contenus dans Table_Product :
Mais nous voulons limiter aux cas qui restent possibles après le choix déjà opéré sur [Code Size] :
Si l’utilisateur a choisi un code [Code Size], il faut limiter le choix aux enregistrements de Table_product qui ont ce [Code Size]
La requête devient :
[IMG][/IMG]
Par contre, si l’utilisateur a choisi de prendre tous les [Code Size], il faut prendre tous les [Code Size] possibles dans TablePProduct, ce qui se traduirait par :
Donc c’est l’un ou l’autre selon que l’utilisateur a choisi « Tous » ou un [Code Size] spécifique.
En testant la valeur de cboSize, on peut aiguiller : si l’utilisateur a choisi « Tous » cboSize vaut zéro.
Le critère s’écrira :
La syntaxe du critère pour [Code Size] est :
VraiFaux([Formulaires]![Formulaire de recherches]![cboSize]=0;[Table_Size]![No Size];[Formulaires]![Formulaire de recherches]![cboSize])
On suit la même démarche pour limiter la liste des [Code Process] restant possibles en fonction du choix de l’utilisateur pour AWS Specification.
La requête devient :
La syntaxe du critère pour [CodeAWS] :
VraiFaux([Formulaires]![Formulaire de recherches]![cboAWS]=0;[Table_AWS]![No AWS ];[Formulaires]![Formulaire de recherches]![cboAWS])
Dernière étape, on ajoute un enregistrement [Code Process] = 0 ; [Process] = --Tous—
en unissant la requête :
Ce qui donne finalement le SQL suivant pour la propriété « Contenu » de cboProcess :
1 2 3 4
| SELECT Table_Product.[Code Process], First(Table_Process.Process) AS PremierDeProcess
FROM Table_AWS INNER JOIN (Table_Size INNER JOIN (Table_Process INNER JOIN Table_Product ON Table_Process.[No Process] = Table_Product.[Code Process]) ON Table_Size.[No Size] = Table_Product.[Code Size]) ON Table_AWS.[No AWS] = Table_Product.CodeAWS
WHERE (((Table_Product.[Code Size])=IIf([Formulaires]![Formulaire de recherches]![cboSize]=0,[Table_Size]![No Size],[Formulaires]![Formulaire de recherches]![cboSize])) AND ((Table_Product.CodeAWS)=IIf([Formulaires]![Formulaire de recherches]![cboAWS]=0,[Table_AWS]![No AWS ],[Formulaires]![Formulaire de recherches]![cboAWS])))
GROUP BY Table_Product.[Code Process] UNION SELECT 0, " ---Tous---" FROM Table_Process; |
2° On procède par analogie pour construire rSize.
Voici son schéma avant union :
Critère pour [Code Process] :
VraiFaux([Formulaires]![Formulaire de recherches]![cboProcess]=0;[Table_Process]![No Process];[Formulaires]![Formulaire de recherches]![cboProcess])
Critère pour [CodeAWS] :
VraiFaux([Formulaires]![Formulaire de recherches]![cboAWS]=0;[Table_AWS]![No AWS];[Formulaires]![Formulaire de recherches]![cboAWS])
Et SQL, après union :
1 2 3 4
| SELECT Table_Product.[Code Size], First(Table_Size.Size) AS PremierDeSize
FROM Table_Size INNER JOIN (Table_Process INNER JOIN (Table_AWS INNER JOIN Table_Product ON Table_AWS.[No AWS] = Table_Product.CodeAWS) ON Table_Process.[No Process] = Table_Product.[Code Process]) ON Table_Size.[No Size] = Table_Product.[Code Size]
WHERE (((Table_Product.[Code Process])=IIf([Formulaires]![Formulaire de recherches]![cboProcess]=0,[Table_Process]![No Process],[Formulaires]![Formulaire de recherches]![cboProcess])) AND ((Table_Product.CodeAWS)=IIf([Formulaires]![Formulaire de recherches]![cboAWS]=0,[Table_AWS]![No AWS],[Formulaires]![Formulaire de recherches]![cboAWS])))
GROUP BY Table_Product.[Code Size] UNION SELECT 0, " ---Tous---" FROM Table_Size; |
3° De même pour construire rAWS.
Critère pour [Code Process] :
VraiFaux([Formulaires]![Formulaire de recherches]![cboProcess]=0;[Table_Process]![No Process];[Formulaires]![Formulaire de recherches]![cboProcess])
Critère pour [Code Size]
VraiFaux([Formulaires]![Formulaire de recherches]![cboSize]=0;[Table_Size]![No Size];[Formulaires]![Formulaire de recherches]![cboSize])
Et après union :
1 2 3 4
| SELECT Table_Product.CodeAWS, First(Table_AWS.[AWS Specification]) AS [PremierDeAWS Specification]
FROM Table_AWS INNER JOIN (Table_Size INNER JOIN (Table_Process INNER JOIN Table_Product ON Table_Process.[No Process] = Table_Product.[Code Process]) ON Table_Size.[No Size] = Table_Product.[Code Size]) ON Table_AWS.[No AWS] = Table_Product.CodeAWS
WHERE (((Table_Product.[Code Process])=IIf([Formulaires]![Formulaire de recherches]![cboProcess]=0,[Table_Process]![No Process],[Formulaires]![Formulaire de recherches]![cboProcess])) AND ((Table_Product.[Code Size])=IIf([Formulaires]![Formulaire de recherches]![cboSize]=0,[Table_Size]![No Size],[Formulaires]![Formulaire de recherches]![cboSize])))
GROUP BY Table_Product.CodeAWS UNION SELECT 0, " ---Tous---" FROM Table_AWS; |
La db qui m'a servi à mettre au point.
Partager