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.

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 26
    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 averti
    Inscrit en
    Juillet 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 26
    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 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 684
    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 :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel (3e édition)
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    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 averti
    Inscrit en
    Juillet 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 26
    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