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 sur critère d'une requête [AC-2013]


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Homme Profil pro
    Derrière l'écran
    Inscrit en
    Novembre 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Derrière l'écran

    Informations forums :
    Inscription : Novembre 2012
    Messages : 161
    Points : 68
    Points
    68
    Par défaut Requête sur critère d'une requête
    bonjour à tous,

    J'ai une requête A regroupant plusieurs critères de plusieurs tables et quelques calculs.
    Cette requête A est une base de travail qui peut évoluer.

    Je souhaiterais décliner plusieurs "sous-requête" en intégrant des critères à mes champs de la requête A.
    - requête B sur critère champ X de la requête A
    - requête C sur critère champ Y de la requête A
    - requête D sur critère champ Z de la requête A
    => Pour les résultats de requêtes B, C, D, ce sont les mêmes résultats que la requête A mais avec le critère champ en plus.

    J'ai trouvé la méthode de copier la requête A et coller en requête B puis faire un critère sur le champ X dans ma requête B, ....

    Mais le problème, c'est que ce n'est pas assez intuitif à mon sens.
    Ce que je souhaite c'est si j'ajoute/supprime un champ de la requête A, j'aimerais bien que ce champ soit mis à jour dans les requêtes B,C D sans devoir le rajouter manuellement.

    Est-ce possible ?

    Merci bien

  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.

    Je pense que l'idéal serait de ne pas créer de requête, du moins pas manuellement.
    Tu peux peut-être t'inspirer de ce qu'on fait pour les formulaires de recherches où du SQL est généré dynamiquement en fonction des besoins.
    Voir https://access.developpez.com/cours/...#formrecherche.

    Sinon la méthode la plus directe pour récupérer toutes les colonnes d'une source est de faire une truc du genre :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    Select [taSource].* from [TaSource]

    Le * indique qu'on prend TOUS les champs visibles dans la source.

    Bon certains vont hurler sans doute hurler que cela ne se fait pas mais ça marche super bien avec Access où les risques de SQL injection sont limités et les volumes restreints.
    Je n'en sert depuis 20 ans et jamais je n'ai eu à m'en plaindre.

    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 du Club
    Homme Profil pro
    Derrière l'écran
    Inscrit en
    Novembre 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Derrière l'écran

    Informations forums :
    Inscription : Novembre 2012
    Messages : 161
    Points : 68
    Points
    68
    Par défaut
    marot_r merci bien,

    Cela fonctionne, sauf que les formats ("en heure abrégé") de mes champs sont passées en numérique ou heure complet.
    7:30 (7h30) donne 0.3125 ou 7:30:00

    Autant le passage en heure complet ce n'est pas grave, mais le passage en numérique est plus embetant.

    Autant dans le formulaire adéquat, j'arrive à rebasculer en heure abrégé, mais j'aimerais bien garder le même format entre ma requête source (A) et mes requêtes fitlrées (B, C, D)

    cordialement

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 649
    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 649
    Points : 14 627
    Points
    14 627
    Par défaut
    bonsoir,
    Autant le passage en heure complet ce n'est pas grave, mais le passage en numérique est plus embetant.
    un champ de type date/heure est stocké sous forme numérique dans les tables(réel double, les décimales représentant les heures), le format permet à l'humain de comprendre ces dates/heures
    Ca ne change donc pas la valeur dans les requêtes quel que soit le format utilisé et il vaut mieux s'en réjouir.
    Le formulaire (IHM: Interface Homme/Machine) est justement là pour afficher ces champs numériques dans un format lisible
    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
    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
    Étrange.

    En principe les types suivent les champs et le * n'y change rien, sont-ils bien définis comme date/heure dans la table source ?

    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.

  6. #6
    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
    Perso, pour mes champs dates, je défini le format d'affichage au niveau de la table.

    C'est un des rares cas où je le fait mais cela ne devrait pas jouer, une date devrait rester une date.

    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.

  7. #7
    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
    Et peux-tu poster le SQL de ta requête A ? Il y a peut-être une conversion cachée, genre cdbl([tonChamp]) ou un NZ() qui fait des siennes.

    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.

  8. #8
    Membre du Club
    Homme Profil pro
    Derrière l'écran
    Inscrit en
    Novembre 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Derrière l'écran

    Informations forums :
    Inscription : Novembre 2012
    Messages : 161
    Points : 68
    Points
    68
    Par défaut
    Les 2 champs posant problème sont ceux qui sont calculés sur une durée : chaque champ avec des horaires est paramétré en "Heure, abrégé" (dans les 2 tables, et la requête A)
    Je n'ai pas besoin d'avoir les secondes dans mes affichages.

    Pour chaque enregistrement, j'ai les 2 champs calculés qui se basent sur 6 champs d'une table X (champ 1 à 4) et d'une table Y (champ 5 à 6) :
    1 - HDbMat : Début Matin
    2 - HFinMat : Fin Matin
    3 - HDdAM : Début après-midi
    4 - HFinAM : Fin après-midi

    5 - Hdépart : Heure de départ
    6 - HRet : Heure de retour


    1er calcul :
    Ce sont des horaires d'activités basés sur les champs 1 à 4
    Il peut y avoir les champs :
    - 1 à 4 si la journée
    - 1 à 2 si le matin
    - 3 à 4 si l'après midi.

    Le 1er champ calculé est donc la durée de l'activité :
    Durée: VraiFaux(EstNull([HFinMat]);0;[HFinMat]-[HDbMat])+VraiFaux(EstNull([HFinAM]);0;[HFinAM]-[HDbAM])

    2ème calcul :
    Ce sont des horaires de travail basés sur les champs 1 à 6
    Il peut y avoir les champs :
    - 1 à 6 si la journée
    - 1 à 2 et 5 à 6 si le matin
    - 3 à 6 si l'après midi.
    Pour calculer les horaires de la coupure repas sur une activité en journée, on ajoute 30 minutes au champ 2 (HFinMat) et on enlève 5 minutes au champ 3 (HDdAM)

    Le 2ème champ calculé est donc la durée travaillée :
    Planifié: [HRet]-[Hdépart]-(VraiFaux([HfinMat] Est Pas Null;VraiFaux([HDbAM] Est Pas Null;AjDate("n";-5;[HDbAM]);0);0)-VraiFaux([HfinMat] Est Pas Null;VraiFaux([HDbAM] Est Pas Null;AjDate("n";30;[HfinMat]);0);0))

    Moi je pense que le petit problème vient des formules "conditionnelle" VraiFaux

    Car mes champs 1 à 6, de ma table, de ma requête A, de mes sous requêtes B à D restent bien en Heure, abrégé
    Mes 2 champs calculés restent bien en Heure, abrégé dans la requête A
    Cela ne pose problème que pour les sous requêtes B à D


    Merci beaucoup

  9. #9
    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.

    Le problème vient du calcul. Une fois que tu as fait des calculs de durée, pour Access ce sont des doubles, plus des champs date/heure. Access n'a pas de champ de type "durée".

    Si tu veux revenir à une heure il faut probablement faire un truc du genre CDate(TonCalcul). Il est probable que ça va te donner 0000/00/00 hh:mn:ss comme résultat.

    Attention il faut que tes durées soient toutes inférieures à 24h sinon tu vas sans doute avoir des ennuis avec le CDate().

    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.

  10. #10
    Membre du Club
    Homme Profil pro
    Derrière l'écran
    Inscrit en
    Novembre 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Derrière l'écran

    Informations forums :
    Inscription : Novembre 2012
    Messages : 161
    Points : 68
    Points
    68
    Par défaut
    avec le rajout de Cdate() cela fonctionne bien

    merci beaucoup

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

Discussions similaires

  1. Critère sur Count dans une Requête Croisée
    Par Nana35 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 03/12/2008, 11h46
  2. Critère d'une requête sur une colonne de liste modifiable
    Par curt dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 03/08/2008, 21h31
  3. critère d'une requête basé sur une zone de liste
    Par hellyjlj dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 15/11/2007, 09h01
  4. manipulation sur date dans une requête
    Par willis dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 06/07/2006, 15h43
  5. Réponses: 2
    Dernier message: 08/03/2006, 11h01

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