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 :

Requête UNION et paramètre venant d'un formulaire [AC-2019]


Sujet :

Requêtes et SQL.

  1. #1
    Membre habitué
    Homme Profil pro
    Technicien en numérisation
    Inscrit en
    Juillet 2002
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien en numérisation

    Informations forums :
    Inscription : Juillet 2002
    Messages : 338
    Points : 155
    Points
    155
    Par défaut Requête UNION et paramètre venant d'un formulaire
    Bonjour ou bonsoir selon votre fuseau horaire,

    J'ai écris une requête SLQ UNION qui sert à afficher par une seule requête les actions des employés lors de la saisie, préparation, numérisation, contrôle qualité et remise en forme, pendant un projet de numérisation d'archives. La requête va chercher dans un champ d'un formulaire une valeur pour le WHERE...

    Chaque actions des employés (saisie, préparation, numérisation, contrôle qualité et remise en forme) sont des tables reliées par le no de la boite. Je vous mets ci-dessous une image des relations.

    Nom : Relations.PNG
Affichages : 761
Taille : 127,1 Ko

    Oui c'est intense... C'est ce que je me suis fait demander comme BD et j'exécute... Je code lol

    Là j'ai un état qui doit chercher une information dans un formulaire.

    Nom du formulaire : F_Créateur_Rapport_Direction

    Nom du champ dans le formulaire : Txt_No_Boite_Rechercher

    J'ai ce code pour le SQL :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    (((ID_Boite)=[Formulaires]![F_Créateur_Rapport_Direction]![Txt_No_Boite_Rechercher].[value]))

    Le problème est que je vois toutes les boites et non juste celle que j'ai saisie dans le champ du formulaire.

    Ici voici le code complet SQL de la requête UNION

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    SELECT Saisie.[No], Saisie.ID_Boite, Saisie.Responsable_saisie_1, Saisie.Date_Saisie_1, Saisie.Heure_Saisie_1, Saisie.Action_1, Saisie.Responsable_saisie_2, Saisie.Date_Saisie_2, Saisie.Heure_Saisie_2, Saisie.Action_2, Saisie.Duree_Saisie, Saisie.Duree_Secondes
    FROM Saisie
    WHERE (((Saisie.Action_1)="Débuter Saisie") AND ((Saisie.Action_2)="Pause Saisie" Or (Saisie.Action_2)="Terminer Saisie")) 
     
    UNION 
     
    SELECT Saisie.[No], Saisie.ID_Boite, Saisie.Responsable_saisie_1, Saisie.Date_Saisie_1, Saisie.Heure_Saisie_1, Saisie.Action_1, Saisie.Responsable_saisie_2, Saisie.Date_Saisie_2, Saisie.Heure_Saisie_2, Saisie.Action_2, Saisie.Duree_Saisie, Saisie.Duree_Secondes
    FROM Saisie
    WHERE (((Saisie.Action_1)="Reprendre Saisie") AND ((Saisie.Action_2)="Pause Saisie" Or (Saisie.Action_2)="Terminer Saisie")) 
     
    UNION 
     
    SELECT Preparation.[No], Preparation.ID_Boite, Preparation.Responsable_Preparation_1, Preparation.Date_Preparation_1, Preparation.Heure_Preparation_1, Preparation.Action_1, Preparation.Responsable_Preparation_2, Preparation.Date_Preparation_2, Preparation.Heure_Preparation_2, Preparation.Action_2, Preparation.Duree_Preparation, Preparation.Duree_Secondes
    FROM Preparation
    WHERE (((Preparation.Action_1)="Débuter Préparation") AND ((Preparation.Action_2)="Pause Préparation" Or (Preparation.Action_2)="Terminer Préparation")) 
     
    UNION
     
    SELECT Preparation.[No], Preparation.ID_Boite, Preparation.Responsable_Preparation_1, Preparation.Date_Preparation_1, Preparation.Heure_Preparation_1, Preparation.Action_1, Preparation.Responsable_Preparation_2, Preparation.Date_Preparation_2, Preparation.Heure_Preparation_2, Preparation.Action_2, Preparation.Duree_Preparation, Preparation.Duree_Secondes
    FROM Preparation
    WHERE (((Preparation.Action_1)="Reprendre Préparation") AND ((Preparation.Action_2)="Pause Préparation" Or (Preparation.Action_2)="Terminer Préparation"))
     
    UNION
     
    SELECT Numerisation.[No], Numerisation.ID_Boite, Numerisation.Responsable_Numerisation_1, Numerisation.Date_Numerisation_1, Numerisation.Heure_Numerisation_1, Numerisation.Action_1, Numerisation.Responsable_Numerisation_2, Numerisation.Date_Numerisation_2, Numerisation.Heure_Numerisation_2, Numerisation.Action_2, Numerisation.Duree_Numerisation, Numerisation.Duree_Secondes
    FROM Numerisation
    WHERE (((Numerisation.Action_1)="Débuter Numérisation") AND ((Numerisation.Action_2)="Pause Numérisation" Or (Numerisation.Action_2)="Terminer Numérisation"))
    UNION
     
    SELECT Numerisation.[No], Numerisation.ID_Boite, Numerisation.Responsable_Numerisation_1, Numerisation.Date_Numerisation_1, Numerisation.Heure_Numerisation_1, Numerisation.Action_1, Numerisation.Responsable_Numerisation_2, Numerisation.Date_Numerisation_2, Numerisation.Heure_Numerisation_2, Numerisation.Action_2, Numerisation.Duree_Numerisation, Numerisation.Duree_Secondes
    FROM Numerisation
    WHERE (((Numerisation.Action_1)="Reprendre Numérisation") AND ((Numerisation.Action_2)="Terminer Numérisation" Or (Numerisation.Action_2)="Pause Numérisation"))
     
    UNION
     
    SELECT CQ.[No], CQ.ID_Boite, CQ.Responsable_Controle_1, CQ.Date_Controle_1, CQ.Heure_Controle_1, CQ.Action_1, CQ.Responsable_Controle_2, CQ.Date_Controle_2, CQ.Heure_Controle_2, CQ.Action_2, CQ.Duree_CQ, CQ.Duree_Secondes
    FROM CQ
    WHERE (((CQ.Action_1)="Débuter Contrôle Qualité") AND ((CQ.Action_2)="Pause Contrôle Qualité" Or (CQ.Action_2)="Terminer Contrôle Qualité")) 
     
    UNION
     
    SELECT CQ.[No], CQ.ID_Boite, CQ.Responsable_Controle_1, CQ.Date_Controle_1, CQ.Heure_Controle_1, CQ.Action_1, CQ.Responsable_Controle_2, CQ.Date_Controle_2, CQ.Heure_Controle_2, CQ.Action_2, CQ.Duree_CQ, CQ.Duree_Secondes
    FROM CQ
    WHERE (((CQ.Action_1)="Reprendre Contrôle Qualité") AND ((CQ.Action_2)="Pause Contrôle Qualité" Or (CQ.Action_2)="Terminer Contrôle Qualité"))
     
    UNION SELECT Remise_Forme.[No], Remise_Forme.ID_Boite, Remise_Forme.Responsable_Mise_en_forme_1, Remise_Forme.Date_Remise_Forme_1, Remise_Forme.Heure_Remise_Forme_1, Remise_Forme.Action_1, Remise_Forme.Responsable_Mise_en_forme_2, Remise_Forme.Date_Remise_Forme_2, Remise_Forme.Heure_Remise_Forme_2, Remise_Forme.Action_2, Remise_Forme.Duree_Remise_Forme, Remise_Forme.Duree_Secondes
    FROM Remise_Forme
    WHERE (((Remise_Forme.Action_1)="Reprendre Remise en Forme") AND ((Remise_Forme.Action_2)="Pause Remise en Forme" Or (Remise_Forme.Action_2)="Terminer Remise en Forme")) and  (((ID_Boite)=[Formulaires]![F_Créateur_Rapport_Direction]![Txt_No_Boite_Rechercher].[value]))
    ORDER BY [ID_Boite], [Date_Saisie_1], [Heure_Saisie_1];

    Voici le résultat final de cette requête :

    Nom : Affichage requête UNION avec le paramètre venant formulaire.PNG
Affichages : 661
Taille : 42,9 Ko

    Avez-vous une idée du problème avec cette requête SQL UNION ????

    Merci

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 637
    Points : 14 611
    Points
    14 611
    Par défaut
    bonjour,
    il faut répéter la clause:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     and  (((ID_Boite)=[Formulaires]![F_Créateur_Rapport_Direction]![Txt_No_Boite_Rechercher].[value]))
    dans chaque sous-requête UNION et pas seulement la dernière.
    ... ou faire un requête enregistrée et filtrer à partir de celle-ci
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  3. #3
    Membre habitué
    Homme Profil pro
    Technicien en numérisation
    Inscrit en
    Juillet 2002
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien en numérisation

    Informations forums :
    Inscription : Juillet 2002
    Messages : 338
    Points : 155
    Points
    155
    Par défaut
    bonjour,

    Bonjour et merci d'avoir pris le temps de me répondre

    Donc je dois absolument mettre toute condition WHERE dans chaque sous-requête UNION...

    D'accord! Je viens de l'apprendre !

    Par contre le ORDER BY que j'utilise dans la dernière sous-requête, est-ce qu'il doit être dans toutes les sous-requêtes ou seulement dans le dernier sous-requête ?

    Dernière question...

    Quand vous dites :
    dans chaque sous-requête UNION et pas seulement la dernière.
    ... ou faire un requête enregistrée et filtrer à partir de celle-ci
    Vous voulez dire que créer une requête dont le résultat ira dans une table et après filtrer le tout par WHERE et ORDER BY ?

    Merci

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 637
    Points : 14 611
    Points
    14 611
    Par défaut
    Par contre le ORDER BY que j'utilise dans la dernière sous-requête, est-ce qu'il doit être dans toutes les sous-requêtes ou seulement dans le dernier sous-requête ?
    dans la dernière sous-requête uniquement

    Vous voulez dire que créer une requête dont le résultat ira dans une table et après filtrer le tout par WHERE et ORDER BY ?
    oui pour la requête mais non pour la table, il faut faire comme cela :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select * from (
     select ...
    union
     select ...
    union 
     select ...
    ) AS T
    Where ...
    Order by ...
    pour le dernier Where c'est uniquement pour les clauses qui s'appliquent à l'ensemble des sous-requêtes: exemple pour filtrer l'ID_Boite
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  5. #5
    Membre habitué
    Homme Profil pro
    Technicien en numérisation
    Inscrit en
    Juillet 2002
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien en numérisation

    Informations forums :
    Inscription : Juillet 2002
    Messages : 338
    Points : 155
    Points
    155
    Par défaut
    Je vous remercie de ces informations et explications

    Résolu lol

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/05/2014, 09h03
  2. Réponses: 8
    Dernier message: 06/05/2014, 09h00
  3. [AC-2007] Requête UNION et paramètres
    Par AgriPhilou dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 17/06/2012, 12h01
  4. Réponses: 5
    Dernier message: 05/05/2011, 15h15
  5. Paramétre sous un champ d'une requête union
    Par Philippe608 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 18/01/2008, 13h45

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