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

  1. #1
    Membre régulier
    Paramétrage d'une requête selon une période - je cale
    Bonsoir à tous,
    content de revenir sur le forum après quelques mois d'absence. Depuis plusieurs jours, je sèche lamentablement sur le problème suivant et je n'ai trouvé aucune doc me donnant un début de solution. J'ai un fichier série (voir table ci-dessous)


    À partir de ce fichier j'alimente une table remplie par une requête paramétrée dans une fenêtre. Le paramètre passé est égal à un des différents millésimes et devrait permettre d'afficher les séries. En prenant l'exemple ci-dessus, si je tape comme paramètre "2013", je voudrais avoir dans la table les lignes suivantes : Série 1, Série 3 et Série 4; avec "2015", les lignes Série 3 et Série 6.
    Je n'arrive pas à trouver la logique de paramétrage de la requête. Merci pour vos conseils et pistes à suivre.
    Bonne soirée
    Bernisch

  2. #2
    Membre expérimenté
    Une requête du style
    Code SQL :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT *
    FROM
       MaTable
    WHERE
       MaTable.Millesime={pAnnée}
       OR
       MaTable.Début={pAnnée}
       OR
       MaTable.Fin={pAnnée}

    devrait faire l'affaire
    Il y a peut être plus simple, mais ça tourne

  3. #3
    Expert éminent
    Bonjour,
    Voroltinquo : la requête ne va pas, car il faut que l'année saisie soit entre la date de début et la date de fin.
    Il faut donc utiliser un between dans la requête, comme ceci:
    Code sql :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
     
    select *
    from Latable where 2013 between debutperiode and finperiode or millesime = 2013

    En remplaçant 2013 par un paramètre bien sûr.

    Tatayo.

  4. #4
    Rédacteur/Modérateur

    Si on met 2013 comme paramètre, on veut (1,3,4) ou (1,3,4,5)
    Si on veut (1,3,4,5), la proposition de tatayo me paraît très bien.
    Si on veut (1,3,4) comme dit au début, alors la proposition de tatayo me paraît toujours très bien.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  5. #5
    Membre éclairé
    Je suis d'accord avec @tatayo mais je ferais plutôt comme ça en retirant le paramètre millésime
    Code sql :Sélectionner tout -Visualiser dans une fenêtre à part
    select * from Latable where {param_année} between year(debutperiode) and year(finperiode)
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

  6. #6
    Membre régulier
    j'avance un peu
    bonjour à tous,
    je n'ai pas encore testé la dernière proposition, mais comme je ne suis pas un pro de SQL, voilà l'avancement : au niveau de la requête tout fonctionne comme je le désire :
    Code SQL :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    SELECT*
    FROM SérieT WHERE {Param1} BETWEEN debutsérie AND finsérie OR millésime = {Param2}

    Par contre cela se complique avec le code sur clic du bouton de recherche :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    HExécuteRequêteSQL(REQ_RechSéries,MaConnexion1, select*  FROM SérieT  where {Param1} BETWEEN debutsérie AND finsérie OR millésime = {Param2})
     
    REQ_RechSéries.Param1 = SAI_Choix
    REQ_RechSéries.Param2 = SAI_Choix
     
    TableAffiche(TABLE_REQ_RechSéries,taCourantBandeau)

    Deux remarques: la table n'affiche aucune lignes avant recherche et lors du clic j'ai le message suivant "Erreur de syntaxe sur le mot "SérieT", le fichier ne semble pas reconnu.
    Merci beaucoup pour ces premières aides.
    Bernisch

  7. #7
    Membre éclairé
    Il faut déclarer ta requête comme ça si c'est une requête que tu écris à la main dans ton code
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    MaReq est chaine = "select *  FROM SérieT  where %1 BETWEEN debutsérie AND finsérie OR millésime = %1"
    REQ_RechSéries est source de données //Doit être déclarée en globale si tu veux la lier à ta table
     
    HExécuteRequêteSQL(REQ_RechSéries,MaConnexion1, ChaineConstruit(MaReq,SAI_Choix))
     
    TableAffiche(TABLE_REQ_RechSéries,taCourantBandeau)
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

  8. #8
    Expert éminent
    Citation Envoyé par bernisch Voir le message
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    HExécuteRequêteSQL(REQ_RechSéries,MaConnexion1, select*  FROM SérieT  where {Param1} BETWEEN debutsérie AND finsérie OR millésime = {Param2})
     
    REQ_RechSéries.Param1 = SAI_Choix
    REQ_RechSéries.Param2 = SAI_Choix
     
    TableAffiche(TABLE_REQ_RechSéries,taCourantBandeau)
    Bonjour Bernisch,

    Déjà, je considère que tu as déclaré REQ_RechSéries en tant que source de données.
    Ensuite, tu dois affecter tes paramètres avant l'exécution de la requête.
    De plus, tu dois gérer les "exclusions".
    Finalement, ta requête n'est pas tip top :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    si TypeRecherche "Période" alors 
    REQ_RechSéries.Param1 = SAI_Choix
    REQ_RechSéries.Param2 = NULL
    sinon
    REQ_RechSéries.Param1 = NULL
    REQ_RechSéries.Param2 = SAI_Choix
    fin
     
    HExécuteRequêteSQL(REQ_RechSéries,MaConnexion1, select *  FROM SérieT  where DebutSerie >= {Param1} AND finsérie <= {Param1} OR millésime = {Param2})
     
    TableAffiche(TABLE_REQ_RechSéries,taCourantBandeau)

    Fait un peu à l'arrache et sans filet... alors pas taper

    PS : tu as calé, alors pour redémarrer prend un coup de gewurtz !
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Make it real not fantasy.

  9. #9
    Membre régulier
    Un grand merci
    Un grand merci à tous pour votre aide. Tout fonctionne correctement et comme je le souhaitais. Si j'ai bien compris, cela ne servait à rien que je me torture la tête avec l'éditeur de requêtes.
    Bonne fin de journée
    Bernisch

  10. #10
    Expert éminent
    Lorraine power !!!!

    Note : Je n'utilise plus l'éditeur de requête depuis des années...
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Make it real not fantasy.