{Access} Relation entre table

Fermé
pompom85 - 25 juin 2009 à 13:35
 pompom85 - 9 juil. 2009 à 08:18
Bonjour,

J'ai un problème sur une requête depuis 2 semaines et je commence à perdre patience!!

En fait, j'ai une première table "Audit" dans laquelle je trouve la date, le lieu et le nom des auditeurs qui peuvent être au nombre de 1 jusqu'à 4.
J'ai ensuite une deuxième table "Auditeurs" dans laquelle j'ai le service auquel est affecté chaque auditeur.
Ces 2 tables sont liées par l'identifiant auditeur.

Ce que je souhaite faire c'est une requête qui me donne les audits pour lesquels au moins un des auditeurs fait partie du service méthode par exemple.

Quand j'affiche les 2 tables dans la requete elles se lient automatiquement mais il n'y a que le premier auditeur qui est liés. Par conséquent la requête ne me donne que les audits pour lesquels le 1er auditeur fait partie du service méthode.
J'ai dupliqué la table "auditeurs" pour que chaque auditeurs de la table "audits" soient reliés à une table "auditeurs". Là, la requête me donne bien les audits pour lesquels un des auditeurs fait partie du service méthode, mais seulement pour les audits qui comptent 4 auditeurs.

Je n'ai pas l'impression que mon explication soit clair donc je joint ci-dessous la reuqête au format SQL.

Si qqun comprends mon problème et peut me faire avancer ca serait extra!!

D'avance merci.

Pompom85


requête SQL:

SELECT T_Audit.ChantierAudit, T_Audit.DateAudit, T_Audit.AuditeurAudit1, T_Audit.AuditeurAudit2, T_Audit.AuditeurAudit3, T_Audit.AuditeurAudit4, Format([DateAudit],"yyyy") AS Année, Format([DateAudit],"ww") AS Semaine, T_Audit.Equipe, T_Auditeur.AffectationAuditeur, T_Auditeur_1.AffectationAuditeur, T_Auditeur_2.AffectationAuditeur, T_Auditeur_3.AffectationAuditeur
FROM T_Auditeur AS T_Auditeur_3 INNER JOIN (T_Auditeur AS T_Auditeur_2 INNER JOIN (T_Auditeur AS T_Auditeur_1 INNER JOIN (T_Auditeur INNER JOIN T_Audit ON T_Auditeur.IdAuditeur = T_Audit.AuditeurAudit1) ON T_Auditeur_1.IdAuditeur = T_Audit.AuditeurAudit2) ON T_Auditeur_2.IdAuditeur = T_Audit.AuditeurAudit3) ON T_Auditeur_3.IdAuditeur = T_Audit.AuditeurAudit4
WHERE (((T_Audit.AuditeurAudit1) Like [Modifiable6] & "*") AND ((Format([DateAudit],"yyyy")) Like "*" & [Texte4] & "*") AND ((T_Auditeur.AffectationAuditeur) Like [afeectation?] & "*")) OR (((T_Audit.AuditeurAudit2) Like [Modifiable6] & "*") AND ((Format([DateAudit],"yyyy")) Like "*" & [Texte4] & "*") AND ((T_Auditeur_1.AffectationAuditeur) Like [afeectation?] & "*")) OR (((T_Audit.AuditeurAudit3) Like [Modifiable6] & "*") AND ((Format([DateAudit],"yyyy")) Like "*" & [Texte4] & "*") AND ((T_Auditeur_2.AffectationAuditeur) Like [afeectation?] & "*")) OR (((T_Audit.AuditeurAudit4) Like [Modifiable6] & "*") AND ((Format([DateAudit],"yyyy")) Like "*" & [Texte4] & "*") AND ((T_Auditeur_3.AffectationAuditeur) Like [afeectation?] & "*"))
ORDER BY T_Audit.DateAudit, Format([DateAudit],"yyyy");
A voir également:

4 réponses

linmer Messages postés 25 Date d'inscription jeudi 18 juin 2009 Statut Membre Dernière intervention 27 juillet 2009 1
25 juin 2009 à 14:50
Bonjour,

J'avoue avoir un peu de mal à visualiser le problème, même si je comprends bien ce que vous voulez obtenir comme résultat. Vous serait-il donc possible de poster la structure des tables pour que je visualise mieux s'il vous plaît?

Cdt
0
zenon Messages postés 726 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 13 février 2010 180
25 juin 2009 à 20:26
Bonsoir,

Si je comprends bien, tu mets le nom de tous les auditeurs dans le même champ.

Si tu mets en critère de sélection = "*"&[Modifiable6]&"*", ça permettra une recherche sur l'ensemble du texte.

Mais ça signifierait que tu as un problème de structure. Tu devrais ajouter une table intermédiaire du type:

T_Audit (N°Audit(clé primaire), lieu, date,...N°participant (clé externe))
T_Auditeurs (N°Auditeur(clé primaire),NomAuditeur)
T_Participants(N°Participant(clé primaire),N°Auditeur)

Ca permet d'avoir toujours une relation un à plusieurs impossible avec deux tables puisque j'imagine que les mêmes personnes se retrouvent dans différents audits et vice et versa.

Dans ta requête, tu peux ensuite introduire un critère de nombre de participants

Mes excuses si je n'ai pas bien compris ton problème...
0
Effectivement, j'aurais sans doute du joindre la structure de mes tables:

T_Auditeur(IdAuditeur, NomAuditeur, PrénomAuditeur, ServiceAuditeur)
T_Audit (IdAudit, DateAudit, Auditeur1, Auditeur2, Auditeur 3, Auditeur 4)

Dans la table T_Audit, les champs auditeurs 1-2-3-4 sont renseignés grâce à une liste déroulante contenant les nom et prénom issus de la table T_Auditeur.

Mes 2 tables ont donc une relation entre IdAuditeur et Auditeur1. C'est peut être là que réside mon problème car les auditeurs 2-3-4 ne sont pas reliés à la table T_Auditeur.

J'espère que je suis plus clair dans mes explications.

Pompom85
0
zenon Messages postés 726 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 13 février 2010 180
26 juin 2009 à 13:25
Je pense qu'il te faut une troisième table:

T_Auditeur(IdAuditeur, NomAuditeur, PrénomAuditeur, ServiceAuditeur)
T_Audit (IdAudit, DateAudit)
T_Participants (N°Participants,Idauditeur,IdAudit)
0
Ca y est j'ai résolu mon problème!!

Effectivement j'avais besoin d'une autre table. Merci pour votre aide.

Pompom85
0