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 :

Utiliser une variable dans une requete et *


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 26
    Points : 17
    Points
    17
    Par défaut Utiliser une variable dans une requete et *
    Bonjour a tous,

    Avant de me faire "incendier", je dois préciser que j'ai recherché cette question dans la FAQ Access. Elle existe bien (utiliser une variable dans une requete...) et fait état d'un lien (Sommaire>VBA>Manipulation des données), page dans laquel je n'ai pas trouvé la question... Erreur d'aiguillage ou abus de boisson de ma part?

    Revenons au propos: comment diable peux-on utiliser la valeur d'une variable comme critère de filtre dans une requete et plus précisement *?

    J'ai bien compris qu'il fallait pour cela transmettre la valeur a travers une fonction qui est le critère de la requete. Cela semble fonctionner quand la fonction retourne une chaine de caractères mais plus du tout quand elle retourne * (tous les caractères = pas de filtre)... Dans ce cas, la requete ne renvoie aucun enregistrement.

    Précision 1: quand je rentre en dur * comme critère de filtage de la requète, j'ai bien le résulat attendu (tous les enregistrements).
    Précision 2: la fonction renvoie bien * et pas autre chose quand je l'interroge dans "Immediate Window".

    Je subodore une question de syntaxe (ma bete noire)...

    Merci de votre aide!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Peux-tu nous mettre la requête que tu as essayé de faire.

    Starec

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 26
    Points : 17
    Points
    17
    Par défaut
    Bonjour,

    Voici le SQL de la requete:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TMaster.*, TMaster.MasSite, TMaster.MasZone, TMaster.MasAxe, Int((([MasMois])-1)/3)+1 AS [Calcul Trimestre], "Q" & [Calcul Trimestre] AS [Trim]
    FROM TMaster
    WHERE (((TMaster.MasSite)=Return_Site_Filter()) AND ((TMaster.MasZone)=Return_Zone_Filter()) AND ((TMaster.MasAxe)=Return_TA_Filter()));
    Return_Site_Filter(), Return_Zone_Filter() et Return_TA_Filter() sont 3 fonctions qui récupèrent la valeur de 3 variables publiques Site_Filter, Zone_Filter at TA_Filter.

    Ces variables sont mises a jour grace a 3 combo box d'un formulaire qui sont alimentés par 3 tables. Si les combo box ne sont pas utilisés (chaine vide), la valeur retournée est par défaut fixée a "*".

    Et c'est la que ca bloque... Les 3 fonctions récupèrent bien la chaine "*" mais la requete ne fonctionne plus...

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 629
    Points : 34 335
    Points
    34 335
    Par défaut
    bonjour,
    si ta requête part dans du code VBA, il faut faire une concaténation des fonction avec le reste de la requête pour que les valeurs retournées soient bien prises en compte.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 26
    Points : 17
    Points
    17
    Par défaut
    Ca y tes! Je crois avoir trouve le truc... Voici le SQL View de la requete modifié:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TMaster.*, TMaster.MasSite, TMaster.MasZone, TMaster.MasAxe, Int((([MasMois])-1)/3)+1 AS [Calcul Trimestre], "Q" & [Calcul Trimestre] AS [Trim]
    FROM TMaster
    WHERE (((TMaster.MasSite) Like "*" & Return_Site_Filter() & "*") AND ((TMaster.MasZone) Like "*" & Return_Zone_Filter() & "*") AND ((TMaster.MasAxe) Like "*" & Return_TA_Filter() & "*"));
    Ca fonctionne correctement dans tous les cas de figure bien que la logique m'echappe encore (et pour longtemps j'en ai peur...); il faudra bien que quelqu'un m'explique pourquoi il faut ainsi barder le code de "*"...

    A+.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 06/06/2011, 13h39
  2. utilisation d'une variable d'une class dans une autre class
    Par the watcher dans le forum Langage
    Réponses: 7
    Dernier message: 31/08/2010, 14h01
  3. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  4. Réponses: 4
    Dernier message: 29/01/2008, 11h12
  5. Réponses: 1
    Dernier message: 15/02/2007, 00h24

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