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

Access Discussion :

requête sur les critères d'un formulaire multi-critères


Sujet :

Access

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juillet 2006
    Messages : 16
    Points : 7
    Points
    7
    Par défaut requête sur les critères d'un formulaire multi-critères
    Bonjour

    Etant novice en la matière j'ai essayé de créer un formulaire multi critère à partir du tutorial qui me donne la référence d'un moteur en fonction de certains critères .Jusque là pas de problème...

    J'ai une table de references et plusieurs champs qui correspondent à des zones de liste: puissance, vitesse,montage,hauteur d'axe et rendement.

    Je voudrais que quand je sélectionne une puissance par exemple ça me met dans les autres listes les valeurs que je peux selectionner. j'ai essayé de faire de la meme manière que pour la liste des résultats mais le problème c'est que quand j'ouvre mon formulaire, rien n'est sélectionné du coup quand je sélectionne une puissance il ne me trouve pas de vitesse vu que les autres champs sont vides.

    voici le code qui fait une requete sur la vitesse:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     Private Sub RefreshQueryV()
    Dim SQLV As String
     
    SQLV = "SELECT DISTINCT Vitesse FROM references"
    SQLV = SQLV & " where references!Puissance = '" & Me.[Liste0] & "'"
    SQLV = SQLV & " and references!Hauteur_axe = '" & Me.[Liste8] & "'"
    SQLV = SQLV & " and references!Montage = '" & Me.[Liste29] & "'"
    SQLV = SQLV & " and references!Rendement = '" & Me.[Liste37] & "'"
    SQLV = SQLV & ";"
    MsgBox SQLV
    Me.Liste4.RowSource = SQLV
    Me.Liste4.Requery
     
    End Sub
    Peut etre que je vais dans la mauvaise direction mais ne connaissant pas le SQL c'est assez difficile pour moi et j'aimerais qu'on me guide un peu.

    D'autre part, j'aimerai savoir comment je pourrai réinitialiser mes listes si je veux faire une autre recherche de référence.

    merci d'avance

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    Récrivez votre requête sous la forme suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT Vitesse 
    FROM   references 
    where  Puissance = COALESCE( MonParamètre, Puissance )
      and  Hauteur_axe = COALESCE( MonParamètre, Puissance)
    ...
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juillet 2006
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    J'ai essayé mais Access 97 ne connait pas à priori cette fonction

    J'ai essayé avec la fonction Dlookup mais ça ne me donne que la 1ere valeur trouvée dans la table.

    Peut être avez vous d'autres idées car moi ça fait 2 jours que je sèche!!

  4. #4
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Pour construire ta requête, pour chaque critère, tu dois tester dans ta liste si une valeur a été saisie ou non. En cas de réponse négative, il ne faut pas ajouter ce critère à ta clause WHERE.

    En gros (je ne fais pas de Acces, donc la syntaxe est approximative) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SQLV = "SELECT DISTINCT Vitesse FROM references WHERE "
     
    If Length(Me.[Liste0]) > 0 Then
       SQLV = SQLV & "references!Puissance = '" & Me.[Liste0] & "'" & " AND "
    End if
     
    If Length(Me.[Liste8]) > 0 Then
       SQLV = SQLV & "references!Hauteur_axe = '" & Me.[Liste8] & "'" & " AND "
    End If
     
    ...
     
    'Pensez à virer le dernier "AND" de la clause WHERE ...

    Si Length (longueur du contenu de ta zone de saisie) ne convient pas, essaye IsEmpty.
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  5. #5
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Sur le forum, j'ai appris que le test de Not Null pouvait s'écrire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If MaVar & "" <> "" Then
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  6. #6
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juillet 2006
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Alors j'ai essayé de tester les saisies avec le Length ( sur Access en fait c'est Len) mais le problème réside dans les "and" parce que si on ne saisit qu'un champ il reste le "and" à la fin.C'est le meme probleme si on le met au début.
    Bref j'arrive pas à gérer les "and", peut-etre faut-il imbriquer les" if"?

  7. #7
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Puisque tu sais que tu auras toujours un AND en trop ...

    il suffit d'ôter les 4 derniers caractères de ta chaîne .... AND et un espace ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Left(MaChaine, Len(MaChaine) - 4)
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  8. #8
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juillet 2006
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Bonjour!!

    Si j'utilise:
    Left(Machaine,Len(Machaine)-4)
    le problème reste le même!

    voilà le début de mon code

    Private Sub RefreshQueryV()
    Dim SQLV As String
    Dim v As String

    SQLV = "SELECT DISTINCT Vitesse FROM references WHERE "

    If Len(Me.[Liste0]) > 0 Then
    SQLV = SQLV & "references!Puissance = '" & Me.[Liste0] & "'" & " "
    End If

    If Len(Me.[Liste8]) > 0 Then

    v = Right(" and references!Hauteur_axe = '" & Me.[Liste8] & "'" & " ", Len(" and references!Hauteur_axe = '" & Me.[Liste8] & "'" & " ") - 4)
    SQLP = SQLP & v

    End If
    Par exemple, si je sélectionne une puissance (Liste0) et qu'après je sélectionne une hauteur d'axe ça pose un problème après dans la rêquete vu qu'il n'y a plus le "and".

    Bref c'est un truc inextricable avec les "if", vous n'avez pas une autre idée? ou une démarche totalement différente?
    J'avais demandé sur une autre discussion si c'est pas possible de mettre un paramètre dans les critères d'une requête qui contiendrait la selection d'une zone de liste, je sais pas ça peut etre une piste?

    Et j'offre le resto à celui qui arrive à me sortir de là car je n'ai plus que 2 jours pour trouver une solution!!

    merci d'avance

    Auclette qui est presque désespérée!!

  9. #9
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juillet 2006
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Bon en fait j'y suis arrivée toute seule comme une grande mais quand meme grâce à votre aide.(merci!) Toutefois, c'est un peu barbare alors surement qu'on peut faire mieux...

    voilà la solution que j'ai trouvé:

    Private Sub RefreshQueryV()
    Dim SQLV As String
    Dim p, h, m, r As String
    Dim var1, var2, var3, var4 As String

    If Len(Me.[Liste37]) > 0 Then
    var4 = " AND"
    r = " references!Rendement = '" & Me.[Liste37] & "'" & " "
    Else
    var4 = ""
    r = ""
    End If

    If Len(Me.[Liste29]) > 0 Then
    var3 = " AND"
    m = " references!Montage = '" & Me.[Liste29] & "'" & " "
    Else
    var3 = ""
    m = ""
    End If


    If Len(Me.[Liste8]) > 0 Then
    var2 = " AND"
    h = " references!Hauteur_axe = '" & Me.[Liste8] & "'" & " "
    Else
    var2 = ""
    h = ""
    End If

    If Len(Me.[Liste0]) > 0 Then
    var1 = "WHERE"
    p = " references!Puissance = '" & Me.[Liste0] & "'"
    Else
    var1 = ""
    p = ""
    If Len(Me.Liste8) > 0 Then
    var2 = "WHERE"
    Else
    If Len(Me.Liste29) > 0 Then
    var3 = "WHERE"
    Else
    If Len(Me.Liste37) > 0 Then
    var4 = "WHERE"
    End If
    End If
    End If
    End If

    SQLV = "SELECT DISTINCT Vitesse FROM references " & var1 & p & var2 & h & var3 & m & var4 & r

    SQLV = SQLV & ";"
    Me.Liste4.RowSource = SQLV
    Me.Liste4.Requery

    End Sub

  10. #10
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    C'est archi-barbare en effet ... il y a plus simple ...

    Dans mon tuto sur la recherche multi critères :
    http://cafeine.developpez.com/access...hemulti/#LIV-C

    J'initialise une Clause Where avec un test bidon du genre Id <>0 et après j'empile les "AND ..."
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  11. #11
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juillet 2006
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    c'est justement parce que le tuto ne convenait pas à ce que je voulais faire que j'ai fait ça!

    t'inquiete pas que jai essayé des méthodes plus simples avant...

Discussions similaires

  1. [AC-2010] Formulaire multi-critères sur plusieurs tables
    Par Ohjoke dans le forum Access
    Réponses: 2
    Dernier message: 24/11/2013, 13h07
  2. Réponses: 7
    Dernier message: 04/04/2007, 16h34
  3. Débutant: Problème formulaire multi critères
    Par jrogron dans le forum Access
    Réponses: 3
    Dernier message: 02/08/2006, 14h08
  4. Update sur les champs d'un formulaire filtré
    Par Tatoine dans le forum Access
    Réponses: 4
    Dernier message: 21/07/2006, 11h46
  5. Focus sur les boutons avec plusieurs formulaire
    Par davids21 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 19/04/2005, 15h48

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