IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Conflit entre requête, relations et champs relationnels nuls [AC-2010]


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Homme Profil pro
    Copywriter
    Inscrit en
    Juillet 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Copywriter
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2013
    Messages : 35
    Points : 21
    Points
    21
    Par défaut Conflit entre requête, relations et champs relationnels nuls
    Bonjour à tous,

    Ma DB est composée d'une table principale à laquelle sont liées d'autres tables.

    J'ai un formulaire dont la source est ma table principale. Dans ce formulaire, il y a 5 listes déroulantes qui listent des éléments de tables secondaires. L'ID numérique correspondant à l'élément choisi est ainsi ajouté à mon champ de liaison de la table principale.

    Subtilité de mon formulaire. Il est doté d'un sous-formulaire qui liste les enregistrements de ma table principale après un filtre d'une requête R0. L'utilisateur choisit un "service" dans la première liste déroulante de mon formulaire (c'est le critère de ma R0). Le sous-formulaire m'affiche alors les enregistrements qui contiennent ce même service (même ID).

    Problème : tant que mes 5 listes déroulantes (faisant appel à d'autres tables) ne sont pas remplies pour un enregistrement, ma requête ne parvient pas à retrouver cet enregistrement. Or, aucun champ ne sera en Null interdit sauf ce premier champ qui conditionne ma requête R0.

    Où donc ai-je pu fauter ? Comment puis-je faire en sorte que ma requête affiche les enregistrements même si ces champs sont vides ?

    Merci d'avance pour vos solutions ou pistes de réflexion.

    Complément d'information si nécessaire : toutes mes jointures sont de type 1.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour

    ma requête ne parvient pas à retrouver cet enregistrement
    Peux-tu poster le SQL de la requête en question ?

    C'est probablement que tu testes les champs pour qu'ils contiennent une valeur et il faut sans doute ajouter "or is null" dans les critère de sélection des champs qui ne sortent pas.

    À confirmer avec le SQL.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Copywriter
    Inscrit en
    Juillet 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Copywriter
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2013
    Messages : 35
    Points : 21
    Points
    21
    Par défaut
    Bonjour,

    Voici mon SQL :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T_Action.RefAG, T_Action.ForeseenDate, T_AG.AGShort, T_Theme_Strat.ThemeStratTitle, [T-Target].TargetTitle, T_Theme_AG.ThemeAGTitle, T_Target_AG.TargetAGTitle, T_Action.Description, T_Action.Message, T_Action.ExtInternet, T_Action.ExtSocialMedia, T_Action.ExtBrochure, T_Action.ExtAffichage, T_Action.ExtEcrans, T_Action.ExtPublicite, T_Action.ExtCommuniquePresse, T_Action.ExtConférencePresse, T_Action.ExtCourrier, T_Action.ExtMassMailing, T_Action.ExtSalon, T_Action.IntIntranet, T_Action.IntSocialMedia, T_Action.IntFininfoPapier, T_Action.IntFininfoElectronique, T_Action.IntMNL, T_Action.IntBrochure, T_Action.IntSeminaire, T_Action.IntAffichage, T_Action.IntCourrier, T_Action.IntSeminaire, T_Action.IntAffichage, T_Action.IntCourrier, T_Action.IntMassMailing, T_Action.ChannelComment, T_Action.DependanceCSC, T_Action.DependanceAutre, T_Action.Budget, T_Action.Comments, T_Action.Contact, T_Action.Status, T_Action.Postponed, T_Action.Delayed, T_Action.IDAction
    FROM [T-Target] INNER JOIN (T_Theme_Strat INNER JOIN (((T_AG INNER JOIN T_Action ON T_AG.IDAG = T_Action.RefAG) INNER JOIN T_Target_AG ON (T_Target_AG.IDTargetAG = T_Action.RefTargetAG) AND (T_AG.IDAG = T_Target_AG.RefAG)) INNER JOIN T_Theme_AG ON (T_Theme_AG.IDThemeAG = T_Action.RefThemeAG) AND (T_AG.IDAG = T_Theme_AG.RefAG)) ON T_Theme_Strat.IDThemeStrat = T_Action.RefThemeStrat) ON [T-Target].IDTarget = T_Action.RefTarget
    WHERE (((T_Action.RefAG)=[Formulaires]![F_Action]![LstAG]))
    ORDER BY T_Action.ForeseenDate;

    Beaucoup de champs à afficher, mais un seul critère très basique en réalité.

    Merci de te pencher sur mon cas.

  4. #4
    Membre éclairé
    Avatar de Didier L
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2004
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 503
    Points : 806
    Points
    806
    Par défaut
    Bonsoir,

    Si j'ai bien compris et lu la requête SQL, ce n'est pas le filtre ou la condition Where qui bloque, mais le fait que si les renseignements des champs avec les tables connexes ne sont pas remplit, la requête ne renvoie pas les lignes.
    Ce qui est normal a cause des "Inner Join" !
    La requête ne renvoie une ligne que si elle trouve la correspondance avec les 4 autres tables.
    Or parfois ces informations ne sont pas saisi (si j'ai bien compris ?)
    Il faut donc utiliser des "LEFT JOIN".

    Essaye cette syntaxe :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT T_Action.RefAG, T_Action.ForeseenDate, T_AG.AGShort, T_Theme_Strat.ThemeStratTitle, [T-Target].TargetTitle, T_Theme_AG.ThemeAGTitle, T_Target_AG.TargetAGTitle, T_Action.Description, T_Action.Message, T_Action.ExtInternet, T_Action.ExtSocialMedia, T_Action.ExtBrochure, T_Action.ExtAffichage, T_Action.ExtEcrans, T_Action.ExtPublicite, T_Action.ExtCommuniquePresse, T_Action.ExtConférencePresse, T_Action.ExtCourrier, T_Action.ExtMassMailing, T_Action.ExtSalon, T_Action.IntIntranet, T_Action.IntSocialMedia, T_Action.IntFininfoPapier, T_Action.IntFininfoElectronique, T_Action.IntMNL, T_Action.IntBrochure, T_Action.IntSeminaire, T_Action.IntAffichage, T_Action.IntCourrier, T_Action.IntSeminaire, T_Action.IntAffichage, T_Action.IntCourrier, T_Action.IntMassMailing, T_Action.ChannelComment, T_Action.DependanceCSC, T_Action.DependanceAutre, T_Action.Budget, T_Action.Comments, T_Action.Contact, T_Action.Status, T_Action.Postponed, T_Action.Delayed, T_Action.IDAction
    FROM [T-Target] 
    LEFT JOIN (T_Theme_Strat 
    LEFT JOIN (((T_AG INNER JOIN T_Action ON T_AG.IDAG = T_Action.RefAG) 
    LEFT JOIN T_Target_AG ON (T_Target_AG.IDTargetAG = T_Action.RefTargetAG) AND (T_AG.IDAG = T_Target_AG.RefAG)) 
    LEFT JOIN T_Theme_AG ON (T_Theme_AG.IDThemeAG = T_Action.RefThemeAG) AND (T_AG.IDAG = T_Theme_AG.RefAG)) ON T_Theme_Strat.IDThemeStrat = T_Action.RefThemeStrat) ON [T-Target].IDTarget = T_Action.RefTarget
    WHERE (((T_Action.RefAG)=[Formulaires]![F_Action]![LstAG]))
    ORDER BY T_Action.ForeseenDate;
    @+


    Pensez au tag

  5. #5
    Membre à l'essai
    Homme Profil pro
    Copywriter
    Inscrit en
    Juillet 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Copywriter
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2013
    Messages : 35
    Points : 21
    Points
    21
    Par défaut
    Didier,

    Tu as parfaitement saisi le nœud du problème . En revanche, le SQL proposé génère une erreur chez moi : "Expression JOIN non supportée".

  6. #6
    Membre éclairé
    Avatar de Didier L
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2004
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 503
    Points : 806
    Points
    806
    Par défaut
    C'est surement parce que je n'avais pas tout décomposé et qu'il restait un INNER JOIN dans ton expression de jointure
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    LEFT JOIN (((T_AG INNER JOIN T_Action ON T_AG.IDAG = T_Action.RefAG)

    essaye :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT T_Action.RefAG, T_Action.ForeseenDate, T_AG.AGShort, T_Theme_Strat.ThemeStratTitle, [T-Target].TargetTitle, T_Theme_AG.ThemeAGTitle, T_Target_AG.TargetAGTitle, T_Action.Description, T_Action.Message, T_Action.ExtInternet, T_Action.ExtSocialMedia, T_Action.ExtBrochure, T_Action.ExtAffichage, T_Action.ExtEcrans, T_Action.ExtPublicite, T_Action.ExtCommuniquePresse, T_Action.ExtConférencePresse, T_Action.ExtCourrier, T_Action.ExtMassMailing, T_Action.ExtSalon, T_Action.IntIntranet, T_Action.IntSocialMedia, T_Action.IntFininfoPapier, T_Action.IntFininfoElectronique, T_Action.IntMNL, T_Action.IntBrochure, T_Action.IntSeminaire, T_Action.IntAffichage, T_Action.IntCourrier, T_Action.IntSeminaire, T_Action.IntAffichage, T_Action.IntCourrier, T_Action.IntMassMailing, T_Action.ChannelComment, T_Action.DependanceCSC, T_Action.DependanceAutre, T_Action.Budget, T_Action.Comments, T_Action.Contact, T_Action.Status, T_Action.Postponed, T_Action.Delayed, T_Action.IDAction
    FROM [T-Target] 
    LEFT JOIN (T_Theme_Strat 
    LEFT JOIN (((T_AG LEFT JOIN T_Action ON T_AG.IDAG = T_Action.RefAG) 
    LEFT JOIN T_Target_AG ON (T_Target_AG.IDTargetAG = T_Action.RefTargetAG) AND (T_AG.IDAG = T_Target_AG.RefAG)) 
    LEFT JOIN T_Theme_AG ON (T_Theme_AG.IDThemeAG = T_Action.RefThemeAG) AND (T_AG.IDAG = T_Theme_AG.RefAG)) ON T_Theme_Strat.IDThemeStrat = T_Action.RefThemeStrat) ON [T-Target].IDTarget = T_Action.RefTarget
    WHERE (((T_Action.RefAG)=[Formulaires]![F_Action]![LstAG]))
    ORDER BY T_Action.ForeseenDate;
    @+


    Pensez au tag

  7. #7
    Membre à l'essai
    Homme Profil pro
    Copywriter
    Inscrit en
    Juillet 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Copywriter
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2013
    Messages : 35
    Points : 21
    Points
    21
    Par défaut
    Je viens d'essayer avec ta dernière proposition, mais j'ai toujours le même message d'erreur.

    Peut-être une vue sur mes relations serait-elle utile :

    Nom : Relations.jpg
Affichages : 191
Taille : 90,7 Ko

  8. #8
    Membre éclairé
    Avatar de Didier L
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2004
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 503
    Points : 806
    Points
    806
    Par défaut
    Le plus simple serait de passer par l'éditeur graphique de requête Access
    au début reprend ta syntaxe avec les "inner join" et ensuite sur chaque relation tu peux double cliquer sur chacune d'elle pour préciser la nature de la jointure.
    Tu verras qu'Access te montrera grâce à une flèche le sens de cette jointure.
    Et ensuite si tu peux en faire une capture d'écran on pourras trouver la solution
    @+


    Pensez au tag

  9. #9
    Membre éclairé
    Avatar de Didier L
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2004
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 503
    Points : 806
    Points
    806
    Par défaut
    Essaye cette syntaxe qui part de ta table principale T_Action avec une jointure simple avec la table T_AG et des jointures externes droite avec les autres tables

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT T_Action.RefAG, T_Action.ForeseenDate, T_AG.AGShort, T_Theme_Strat.ThemeStratTitle, [T-Target].TargetTitle, T_Theme_AG.ThemeAGTitle, T_Target_AG.TargetAGTitle, T_Action.Description, T_Action.Message, T_Action.ExtInternet, T_Action.ExtSocialMedia, T_Action.ExtBrochure, T_Action.ExtAffichage, T_Action.ExtEcrans, T_Action.ExtPublicite, T_Action.ExtCommuniquePresse, T_Action.ExtConférencePresse, T_Action.ExtCourrier, T_Action.ExtMassMailing, T_Action.ExtSalon, T_Action.IntIntranet, T_Action.IntSocialMedia, T_Action.IntFininfoPapier, T_Action.IntFininfoElectronique, T_Action.IntMNL, T_Action.IntBrochure, T_Action.IntSeminaire, T_Action.IntAffichage, T_Action.IntCourrier, T_Action.IntSeminaire, T_Action.IntAffichage, T_Action.IntCourrier, T_Action.IntMassMailing, T_Action.ChannelComment, T_Action.DependanceCSC, T_Action.DependanceAutre, T_Action.Budget, T_Action.Comments, T_Action.Contact, T_Action.Status, T_Action.Postponed, T_Action.Delayed, T_Action.IDAction
    FROM 
    (T_Action INNER JOIN T_AG on T_Action.RefAG = T_AG.IDAG)
    RIGHT JOIN [T-Target] ON T_Action.RefTarget=[T-Target].IDTarget 
    RIGHT JOIN T_Target_AG ON (T_Action.RefTargetAG=T_Target_AG.IDTargetAG ) AND (T_AG.IDAG = T_Target_AG.RefAG)
    RIGHT JOIN T_Theme_AG ON (T_Action.RefThemeAG=T_Theme_AG.IDThemeAG ) AND (T_AG.IDAG = T_Theme_AG.RefAG)
    RIGHT JOIN T_Theme_Strat ON T_Action.RefThemeStrat=T_Theme_Strat.IDThemeStrat 
    WHERE (((T_Action.RefAG)=[Formulaires]![F_Action]![LstAG]))
    ORDER BY T_Action.ForeseenDate;
    @+


    Pensez au tag

  10. #10
    Membre à l'essai
    Homme Profil pro
    Copywriter
    Inscrit en
    Juillet 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Copywriter
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2013
    Messages : 35
    Points : 21
    Points
    21
    Par défaut
    Je dois m'absenter. Je teste ça dès que possible et reviens vers toi. Merci déjà pour ton aide ;-)

  11. #11
    Membre à l'essai
    Homme Profil pro
    Copywriter
    Inscrit en
    Juillet 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Copywriter
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2013
    Messages : 35
    Points : 21
    Points
    21
    Par défaut
    Didier,

    Alors, j'ai essayé la syntaxe

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT T_Action.RefAG, T_Action.ForeseenDate, T_AG.AGShort, T_Theme_Strat.ThemeStratTitle, [T-Target].TargetTitle, T_Theme_AG.ThemeAGTitle, T_Target_AG.TargetAGTitle, T_Action.Description, T_Action.Message, T_Action.ExtInternet, T_Action.ExtSocialMedia, T_Action.ExtBrochure, T_Action.ExtAffichage, T_Action.ExtEcrans, T_Action.ExtPublicite, T_Action.ExtCommuniquePresse, T_Action.ExtConférencePresse, T_Action.ExtCourrier, T_Action.ExtMassMailing, T_Action.ExtSalon, T_Action.IntIntranet, T_Action.IntSocialMedia, T_Action.IntFininfoPapier, T_Action.IntFininfoElectronique, T_Action.IntMNL, T_Action.IntBrochure, T_Action.IntSeminaire, T_Action.IntAffichage, T_Action.IntCourrier, T_Action.IntSeminaire, T_Action.IntAffichage, T_Action.IntCourrier, T_Action.IntMassMailing, T_Action.ChannelComment, T_Action.DependanceCSC, T_Action.DependanceAutre, T_Action.Budget, T_Action.Comments, T_Action.Contact, T_Action.Status, T_Action.Postponed, T_Action.Delayed, T_Action.IDAction
    FROM 
    (T_Action INNER JOIN T_AG on T_Action.RefAG = T_AG.IDAG)
    RIGHT JOIN [T-Target] ON T_Action.RefTarget=[T-Target].IDTarget 
    RIGHT JOIN T_Target_AG ON (T_Action.RefTargetAG=T_Target_AG.IDTargetAG ) AND (T_AG.IDAG = T_Target_AG.RefAG)
    RIGHT JOIN T_Theme_AG ON (T_Action.RefThemeAG=T_Theme_AG.IDThemeAG ) AND (T_AG.IDAG = T_Theme_AG.RefAG)
    RIGHT JOIN T_Theme_Strat ON T_Action.RefThemeStrat=T_Theme_Strat.IDThemeStrat 
    WHERE (((T_Action.RefAG)=[Formulaires]![F_Action]![LstAG]))
    ORDER BY T_Action.ForeseenDate;

    Malheureusement, je reçois ce message d'erreur :

    Nom : Bug.jpg
Affichages : 189
Taille : 49,7 Ko

    J'ai ensuite essayé, dans l'outil graphique, de modifier le type de jointure de T_Action vers T_Target_AG, T_Theme_AG, T_Theme_Strat et T-Target (Type de jointure 2 et 3 essayées) pour en examiner le SQL. Ceci a bien pour effet de "flécher" ma jointure, mais là, c'est ce message qui apparaît au moment de l'exécution de la requête ou de l'affichage du SQL :

    Nom : ERROR.jpg
Affichages : 217
Taille : 38,5 Ko

  12. #12
    Membre éclairé
    Avatar de Didier L
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2004
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 503
    Points : 806
    Points
    806
    Par défaut
    Bonsoir,

    Il m'est difficile de tester la syntaxe exacte sans avoir les tables
    Ce ne doit pas être grand chose

    Essaye cette syntaxe allégée car tes relations entre la Table T_AG et T_Theme_AG et T_Target_AG ne sont pas nécessaire pour ta requête, dès lors que tu a une relation avec les clés primaire de ces deux tables tu est sur de leur unicité :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT T_Action.RefAG, T_Action.ForeseenDate, T_AG.AGShort, T_Theme_Strat.ThemeStratTitle, [T-Target].TargetTitle, T_Theme_AG.ThemeAGTitle, T_Target_AG.TargetAGTitle, T_Action.Description, T_Action.Message, T_Action.ExtInternet, T_Action.ExtSocialMedia, T_Action.ExtBrochure, T_Action.ExtAffichage, T_Action.ExtEcrans, T_Action.ExtPublicite, T_Action.ExtCommuniquePresse, T_Action.ExtConférencePresse, T_Action.ExtCourrier, T_Action.ExtMassMailing, T_Action.ExtSalon, T_Action.IntIntranet, T_Action.IntSocialMedia, T_Action.IntFininfoPapier, T_Action.IntFininfoElectronique, T_Action.IntMNL, T_Action.IntBrochure, T_Action.IntSeminaire, T_Action.IntAffichage, T_Action.IntCourrier, T_Action.IntSeminaire, T_Action.IntAffichage, T_Action.IntCourrier, T_Action.IntMassMailing, T_Action.ChannelComment, T_Action.DependanceCSC, T_Action.DependanceAutre, T_Action.Budget, T_Action.Comments, T_Action.Contact, T_Action.Status, T_Action.Postponed, T_Action.Delayed, T_Action.IDAction
    FROM 
    T_AG INNER JOIN T_Action on T_AG.IDAG = T_Action.RefAG 
    RIGHT JOIN [T-Target] ON T_Action.RefTarget=[T-Target].IDTarget 
    RIGHT JOIN T_Target_AG ON T_Action.RefTargetAG=T_Target_AG.IDTargetAG
    RIGHT JOIN T_Theme_AG ON T_Action.RefThemeAG=T_Theme_AG.IDThemeAG
    RIGHT JOIN T_Theme_Strat ON T_Action.RefThemeStrat=T_Theme_Strat.IDThemeStrat 
    WHERE T_Action.RefAG=[Formulaires]![F_Action]![LstAG]
    ORDER BY T_Action.ForeseenDate;

    Si cela ne fonctionne pas il faut que dans ta requête tu aies ce genre de relation :
    Nom : Sans titre.png
Affichages : 139
Taille : 258,4 Ko

    Si tu as toujours le dernier message d'erreur que tu as envoyé sur le type de jointure, repart d'une nouvelle requête et ajoute les tables une a une dans le bon ordre. D'abord la table T_AG, pui la table T_Action (garde la relation qu'il te propose), ensuite ajoute la table T_Theme_AG, supprime la relation avec la table T_AG (elle n'est supprimés que dans la requête). Pour la supprimer fait un clic droit dessus. Modifie la relation avec la table T_Action, et ensuite fais de même pour la table T_Target_AG, pui T_Theme_Strat et T-Target

    Normalement cela devrait fonctionner
    @+


    Pensez au tag

  13. #13
    Membre à l'essai
    Homme Profil pro
    Copywriter
    Inscrit en
    Juillet 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Copywriter
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2013
    Messages : 35
    Points : 21
    Points
    21
    Par défaut
    Bonjour Didier,

    En modifiant mes relations comme indiqué dans ton illustration, j'obtiens ce SQL :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T_Action.RefAG, T_Action.ForeseenDate, T_AG.AGShort, T_Theme_Strat.ThemeStratTitle, [T-Target].TargetTitle, T_Theme_AG.ThemeAGTitle, T_Target_AG.TargetAGTitle, T_Action.Description, T_Action.Message, T_Action.ExtInternet, T_Action.ExtSocialMedia, T_Action.ExtBrochure, T_Action.ExtAffichage, T_Action.ExtEcrans, T_Action.ExtPublicite, T_Action.ExtCommuniquePresse, T_Action.ExtConférencePresse, T_Action.ExtCourrier, T_Action.ExtMassMailing, T_Action.ExtSalon, T_Action.IntIntranet, T_Action.IntSocialMedia, T_Action.IntFininfoPapier, T_Action.IntFininfoElectronique, T_Action.IntMNL, T_Action.IntBrochure, T_Action.IntSeminaire, T_Action.IntAffichage, T_Action.IntCourrier, T_Action.IntSeminaire, T_Action.IntAffichage, T_Action.IntCourrier, T_Action.IntMassMailing, T_Action.ChannelComment, T_Action.DependanceCSC, T_Action.DependanceAutre, T_Action.Budget, T_Action.Comments, T_Action.Contact, T_Action.Status, T_Action.Postponed, T_Action.Delayed, T_Action.IDAction
    FROM [T-Target] RIGHT JOIN (T_Theme_Strat RIGHT JOIN (T_Theme_AG RIGHT JOIN (T_Target_AG RIGHT JOIN (T_AG INNER JOIN T_Action ON T_AG.IDAG = T_Action.RefAG) ON T_Target_AG.IDTargetAG = T_Action.RefTargetAG) ON T_Theme_AG.IDThemeAG = T_Action.RefThemeAG) ON T_Theme_Strat.IDThemeStrat = T_Action.RefThemeStrat) ON [T-Target].IDTarget = T_Action.RefTarget
    WHERE (((T_Action.RefAG)=[Formulaires]![F_Action]![LstAG]))
    ORDER BY T_Action.ForeseenDate;

    Et ça semble fonctionner. Merci beaucoup ! Je commence un peu mieux à comprendre cette histoire de sens de jointure que je n'avais jamais vraiment dû explorer auparavant.

    J'en ai profité pour tenter de reproduire ces adaptations dans une autre requête exécutée à partir d'un formulaire de recherche multicritère (F_Search). Plusieurs critères peuvent être combinés par l'utilisateur. J'obtiens ce SQL :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T_Action.IDAction, T_Action.ForeseenDate, T_AG.AGTitle, T_Theme_Strat.ThemeStratTitle, [T-Target].TargetTitle, T_Theme_AG.ThemeAGTitle, [T-Target].TargetTitle, T_Action.Description, T_Action.Message, T_Action.ExtInternet, T_Action.ExtSocialMedia, T_Action.ExtBrochure, T_Action.ExtAffichage, T_Action.ExtEcrans, T_Action.ExtPublicite, T_Action.ExtCommuniquePresse, T_Action.ExtConférencePresse, T_Action.ExtCourrier, T_Action.ExtMassMailing, T_Action.ExtSalon, T_Action.IntIntranet, T_Action.IntSocialMedia, T_Action.IntFininfoElectronique, T_Action.IntMNL, T_Action.IntBrochure, T_Action.IntSeminaire, T_Action.IntAffichage, T_Action.IntCourrier, T_Action.IntMassMailing, T_Action.ChannelComment, T_Action.DependanceCSC, T_Action.DependanceAutre, T_Action.Budget, T_Action.Comments, T_Action.Contact, T_Action.Status, T_Action.Postponed, T_Action.Delayed, T_Action.Evaluation
    FROM [T-Target] RIGHT JOIN (T_Theme_Strat RIGHT JOIN (T_Theme_AG RIGHT JOIN (T_Target_AG RIGHT JOIN (T_AG INNER JOIN T_Action ON T_AG.IDAG = T_Action.RefAG) ON T_Target_AG.IDTargetAG = T_Action.RefTargetAG) ON T_Theme_AG.IDThemeAG = T_Action.RefThemeAG) ON T_Theme_Strat.IDThemeStrat = T_Action.RefThemeStrat) ON [T-Target].IDTarget = T_Action.RefTarget
    WHERE (((T_Action.ForeseenDate) Between Nz([Formulaires]![F_Search]![TxtDateStart],[T_Action]![ForeseenDate]) And Nz([Formulaires]![F_Search]![TxtDateEnd],[T_Action]![ForeseenDate])) AND ((T_Action.Description) Like "*" & Nz([Formulaires]![F_Search]![TxtDescription],[T_Action]![Description]) & "*") AND ((T_Action.Message) Like "*" & Nz([Formulaires]![F_Search]![TxtMessage],[T_Action]![Message]) & "*") AND ((T_Action.ExtInternet)=IIf([Formulaires]![F_Search]![CochExtInternet]=-1,-1,[ExtInternet])) AND ((T_Action.ExtSocialMedia)=IIf([Formulaires]![F_Search]![CochExtSocialMedia]=-1,-1,[ExtSocialMedia])) AND ((T_Action.ExtBrochure)=IIf([Formulaires]![F_Search]![CochExtBrochure]=-1,-1,[ExtBrochure])) AND ((T_Action.ExtAffichage)=IIf([Formulaires]![F_Search]![CochExtAffichage]=-1,-1,[ExtAffichage])) AND ((T_Action.ExtEcrans)=IIf([Formulaires]![F_Search]![CochExtEcrans]=-1,-1,[ExtEcrans])) AND ((T_Action.ExtPublicite)=IIf([Formulaires]![F_Search]![CochExtPublicite]=-1,-1,[ExtPublicite])) AND ((T_Action.ExtCommuniquePresse)=IIf([Formulaires]![F_Search]![CochExtCommunique]=-1,-1,[ExtCommuniquePresse])) AND ((T_Action.ExtConférencePresse)=IIf([Formulaires]![F_Search]![CochExtConference]=-1,-1,[ExtConférencePresse])) AND ((T_Action.ExtCourrier)=IIf([Formulaires]![F_Search]![CochExtCourrier]=-1,-1,[ExtCourrier])) AND ((T_Action.ExtMassMailing)=IIf([Formulaires]![F_Search]![CochExtMassMailing]=-1,-1,[ExtMassMailing])) AND ((T_Action.ExtSalon)=IIf([Formulaires]![F_Search]![CochExtSalon]=-1,-1,[ExtSalon])) AND ((T_Action.IntIntranet)=IIf([Formulaires]![F_Search]![CochIntIntranet]=-1,-1,[IntIntranet])) AND ((T_Action.IntSocialMedia)=IIf([Formulaires]![F_Search]![CochIntSocialMedia]=-1,-1,[IntSocialMedia])) AND ((T_Action.IntFininfoElectronique)=IIf([Formulaires]![F_Search]![CochIntFininfoElectronique]=-1,-1,[IntFininfoElectronique])) AND ((T_Action.IntMNL)=IIf([Formulaires]![F_Search]![CochIntMNL]=-1,-1,[IntMNL])) AND ((T_Action.IntBrochure)=IIf([Formulaires]![F_Search]![CochIntBrochure]=-1,-1,[IntBrochure])) AND ((T_Action.IntSeminaire)=IIf([Formulaires]![F_Search]![CochIntSeminaire]=-1,-1,[IntSeminaire])) AND ((T_Action.IntAffichage)=IIf([Formulaires]![F_Search]![CochIntAffichage]=-1,-1,[IntAffichage])) AND ((T_Action.IntCourrier)=IIf([Formulaires]![F_Search]![CochIntCourrier]=-1,-1,[IntCourrier])) AND ((T_Action.IntMassMailing)=IIf([Formulaires]![F_Search]![CochIntMassMailing]=-1,-1,[IntMassMailing])) AND ((T_Action.Status)=Nz([Formulaires]![F_Search]![LstStatus],[Status])) AND ((T_Action.Postponed)=IIf([Formulaires]![F_Search]![CochPostponed]=-1,-1,[Postponed])) AND ((T_Action.Delayed)=IIf([Formulaires]![F_Search]![CochDelayed]=-1,-1,[Delayed])) AND ((T_Action.IntFininfoPapier)=IIf([Formulaires]![F_Search]![CochIntFininfoPapier]=-1,-1,[IntFininfoPapier])) AND ((T_AG.IDAG)=Nz([Formulaires]![F_Search]![LstAG],[T_AG]![IDAG])) AND ((T_Theme_Strat.IDThemeStrat)=Nz([Formulaires]![F_Search]![LstTheme],[T_Theme_Strat]![IDThemeStrat])) AND (([T-Target].IDTarget)=Nz([Formulaires]![F_Search]![LstTarget],[T-Target]![IDTarget])) AND ((T_Theme_AG.IDThemeAG)=Nz([Formulaires]![F_Search]![LstThemeAG],[T_Theme_AG]![IDThemeAG])) AND ((T_Target_AG.IDTargetAG)=Nz([Formulaires]![F_Search]![LstTargetAG],[T_Target_AG]![IDTargetAG])))
    ORDER BY T_Action.ForeseenDate;

    Evidemment, là, il y a beaucoup plus de critères et naturellement, ça ne fonctionne pas. Mêmes symptômes. Serait-ce donc plus qu'une histoire de sens de jointure ?

    Les contrôles notés Lst sont des listes déroulantes, Coch des cases à cocher et Txt des zones de texte.

    Désolé pour "l'arbre qui cache la forêt", je pensais vraiment pouvoir adapter la solution proposée à mes 2 problèmes. J'ai un peu présumé de mes capacités.

  14. #14
    Membre éclairé
    Avatar de Didier L
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2004
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 503
    Points : 806
    Points
    806
    Par défaut
    Bonjour,

    En fait il faut faire attention à l'odre de construction de ta requête car tu ne peux pas avoir d'inner Join après un left ou right Join !
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    RIGHT JOIN (T_AG INNER JOIN T_Action ON

    Cette jointure doit être la première de la liste et lorsque nous avons plusieurs tables avec des jointure externes, il faut toujours que les flèches soeint toutes dans le même sens exempel :
    A vers B et B vers C
    Si A vers B et B=C ce n'est pas possible
    Dans ce cas ce devrait être B=C et B vers A ;-)

    J'espère avoir été clair

    Bonne continuation
    @+


    Pensez au tag

  15. #15
    Membre à l'essai
    Homme Profil pro
    Copywriter
    Inscrit en
    Juillet 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Copywriter
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2013
    Messages : 35
    Points : 21
    Points
    21
    Par défaut
    Ok merci pour le complément d'info.

    Le problème subsiste néanmoins. Mais je pense qu'il s'agit davantage d'un souci de recherche multicritère. Je vais explorer quelques pistes. J'ai vu qu'il y avait qqs tutos et je relancerai une nouvelle discussion si nécessaire.

    Merci pour tes lumières.

    Bien à toi,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. requête: somme de champs dont un est nul
    Par djelloharmel dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 06/10/2011, 20h08
  2. Réponses: 2
    Dernier message: 09/08/2011, 14h45
  3. [AC-2007] Relation entre les tables et champs automatique
    Par othke dans le forum Modélisation
    Réponses: 5
    Dernier message: 22/05/2010, 07h39
  4. Réponses: 14
    Dernier message: 03/11/2009, 17h11
  5. [Technique] Conflits entre plusieurs requêtes
    Par Neowile dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 24/03/2003, 09h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo