OVH Cloud OVH Cloud

zone de liste + requete

10 réponses
Avatar
VINCENT
bonjour

un formulaire qui comprend 6 zones de listes modifiables me permet de
paramétrer une requete SQL ecrite derriere un bouton. Une fois que les 6
zones sont renseignées, l'appui sur le bouton permet d'afficher un état.
Mon pb est le suivant :
Si un utilisateur n'a pas besoin d'effectuer une requete sur les 6 zones de
listes mais qu'il n'est besoin que de deux comment faire.
merci pour votre aide

10 réponses

Avatar
Gafish
VINCENT wrote:
bonjour


Bonjour

un formulaire qui comprend 6 zones de listes modifiables me permet de
paramétrer une requete SQL ecrite derriere un bouton. Une fois que
les 6 zones sont renseignées, l'appui sur le bouton permet d'afficher
un état. Mon pb est le suivant :
Si un utilisateur n'a pas besoin d'effectuer une requete sur les 6
zones de listes mais qu'il n'est besoin que de deux comment faire.
merci pour votre aide


Dans ta requête, au niveau des champs à filtrer dans les critères tu mets un
vraifaux, en testant si la liste est renseignée. Si elle est renseignée, tu
filtres le champ par la liste, si elle ne l'est pas tu filtres par le champ
(c'est à dire qu'il se filtre par lui-même, donc pas de filtre).
Exemple:
VraiFaux(len(Forms![TonForm]![TaListe]) 0;[TonChamp];Forms![TonForm]![TaListe])

Arnaud
--
Charte du forum : http://users.skynet.be/mpfa/
Recherche dans les archives :
http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
vincent chinazzi
merci pour la reponse,
je test a surement plus tard
"Gafish" a écrit dans le message de news:

VINCENT wrote:
bonjour


Bonjour

un formulaire qui comprend 6 zones de listes modifiables me permet de
paramétrer une requete SQL ecrite derriere un bouton. Une fois que
les 6 zones sont renseignées, l'appui sur le bouton permet d'afficher
un état. Mon pb est le suivant :
Si un utilisateur n'a pas besoin d'effectuer une requete sur les 6
zones de listes mais qu'il n'est besoin que de deux comment faire.
merci pour votre aide


Dans ta requête, au niveau des champs à filtrer dans les critères tu mets
un

vraifaux, en testant si la liste est renseignée. Si elle est renseignée,
tu

filtres le champ par la liste, si elle ne l'est pas tu filtres par le
champ

(c'est à dire qu'il se filtre par lui-même, donc pas de filtre).
Exemple:
VraiFaux(len(Forms![TonForm]![TaListe]) > 0;[TonChamp];Forms![TonForm]![TaListe])

Arnaud
--
Charte du forum : http://users.skynet.be/mpfa/
Recherche dans les archives :
http://groups.google.fr/group/microsoft.public.fr.access?hl=fr





Avatar
vincent chinazzi
désolé de déranger encore une fois, l'idée du vraiFaux me plait bien mais je
ne sait pas quoi en faire, je vous joint une partie de la requete pour que
vous m'éclairiez
merci

sqlstr = "SELECT formateurs.formateur, lieux.lieu, matieres.matiere,
types.type, editeurs.editeur, documents.intitule, auteurs.Auteur "


sqlstr = sqlstr & "FROM auteurs INNER JOIN (lieux INNER JOIN (types INNER
JOIN (formateurs INNER JOIN (matieres INNER JOIN (editeurs INNER JOIN


documents ON editeurs.editeur = documents.editeur) ON matieres.matiere documents.matiere) ON formateurs.formateur = documents.formateur) ON
types.type = documents.type) ON lieux.lieu = documents.lieu) ON
auteurs.Auteur = documents.auteur "
sqlstr = sqlstr & "WHERE ((formateurs.formateur='" & Me.Modifiable0 & "')
AND (lieux.lieu='" & Me.Modifiable2 & "') AND (matieres.matiere='" &


Me.Modifiable4 & "') AND (types.type='" & Me.Modifiable11 & "') AND
(editeurs.editeur='" & Me.Modifiable15 & "') AND (auteurs.Auteur='" &
Me.Modifiable13 & "'));"

"Gafish" a écrit dans le message de news:

VINCENT wrote:
bonjour


Bonjour

un formulaire qui comprend 6 zones de listes modifiables me permet de
paramétrer une requete SQL ecrite derriere un bouton. Une fois que
les 6 zones sont renseignées, l'appui sur le bouton permet d'afficher
un état. Mon pb est le suivant :
Si un utilisateur n'a pas besoin d'effectuer une requete sur les 6
zones de listes mais qu'il n'est besoin que de deux comment faire.
merci pour votre aide


Dans ta requête, au niveau des champs à filtrer dans les critères tu mets
un

vraifaux, en testant si la liste est renseignée. Si elle est renseignée,
tu

filtres le champ par la liste, si elle ne l'est pas tu filtres par le
champ

(c'est à dire qu'il se filtre par lui-même, donc pas de filtre).
Exemple:
VraiFaux(len(Forms![TonForm]![TaListe]) > 0;[TonChamp];Forms![TonForm]![TaListe])

Arnaud
--
Charte du forum : http://users.skynet.be/mpfa/
Recherche dans les archives :
http://groups.google.fr/group/microsoft.public.fr.access?hl=fr





Avatar
Gafish
vincent chinazzi wrote:
désolé de déranger encore une fois, l'idée du vraiFaux me plait bien
mais je ne sait pas quoi en faire,


C'est une requête Access, ou elle est créée en vba ?
Dans le premier cas, tu te mets dans ta requête en mode création, et tu mets
le vraiFaux dans la zone critères du champ à filtrer.

Arnaud
--
Charte du forum : http://users.skynet.be/mpfa/
Recherche dans les archives :
http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
vincent chinazzi
elle est créée en vba
mais faut il que je mette l'instruction
'VraiFaux(len(Forms![TonForm]![­TaListe]) '0;[TonChamp];Forms![TonForm]![­TaListe]) dans ma requete dsl mais la je
vois pas. j'avais aussi penser à des case a cocher
si case cocher prendre en compte la zone de liste sinon non, là j'ai pas
trouvé le code non plus.
sqlstr = sqlstr & "WHERE ((formateurs.formateur='" & Me.Modifiable0 & "')
AND (lieux.lieu='" & Me.Modifiable2 & "') AND (matieres.matiere='" &


Me.Modifiable4 & "') AND (types.type='" & Me.Modifiable11 & "') AND
(editeurs.editeur='" & Me.Modifiable15 & "') AND (auteurs.Auteur='" &
Me.Modifiable13 & "'));"




"Gafish" a écrit dans le message de news:

vincent chinazzi wrote:
désolé de déranger encore une fois, l'idée du vraiFaux me plait bien
mais je ne sait pas quoi en faire,


C'est une requête Access, ou elle est créée en vba ?
Dans le premier cas, tu te mets dans ta requête en mode création, et tu
mets

le vraiFaux dans la zone critères du champ à filtrer.

Arnaud
--
Charte du forum : http://users.skynet.be/mpfa/
Recherche dans les archives :
http://groups.google.fr/group/microsoft.public.fr.access?hl=fr





Avatar
vincent chinazzi
je peux envoyer la base si besoin
merci
"vincent chinazzi" a écrit dans le message
de news:
elle est créée en vba
mais faut il que je mette l'instruction
'VraiFaux(len(Forms![TonForm]![­TaListe]) > '0;[TonChamp];Forms![TonForm]![­TaListe]) dans ma requete dsl mais la je
vois pas. j'avais aussi penser à des case a cocher
si case cocher prendre en compte la zone de liste sinon non, là j'ai pas
trouvé le code non plus.
sqlstr = sqlstr & "WHERE ((formateurs.formateur='" & Me.Modifiable0 &
"')



AND (lieux.lieu='" & Me.Modifiable2 & "') AND (matieres.matiere='" &
Me.Modifiable4 & "') AND (types.type='" & Me.Modifiable11 & "') AND
(editeurs.editeur='" & Me.Modifiable15 & "') AND (auteurs.Auteur='" &
Me.Modifiable13 & "'));"




"Gafish" a écrit dans le message de news:

vincent chinazzi wrote:
désolé de déranger encore une fois, l'idée du vraiFaux me plait bien
mais je ne sait pas quoi en faire,


C'est une requête Access, ou elle est créée en vba ?
Dans le premier cas, tu te mets dans ta requête en mode création, et tu
mets

le vraiFaux dans la zone critères du champ à filtrer.

Arnaud
--
Charte du forum : http://users.skynet.be/mpfa/
Recherche dans les archives :
http://groups.google.fr/group/microsoft.public.fr.access?hl=fr









Avatar
3stone
Salut,

"vincent chinazzi"
| je peux envoyer la base si besoin


inspire toi de ceci :
http://users.skynet.be/accesshome/ah_formulaires_filtragepersonnalise.htm


l'exemple est donner pour la construction d'un filtre, mais le raisonnement
reste le même pour créer une requête SQL...

c.a.d. uniquement "écrire" les critères pour les listes avec séléctions !



--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Email : http://www.cerbermail.com/?Xfg61Z3IQw
Avatar
Jacqueline Labouret
si j'ai bien compris et ce n'est surement pas le cas car cela ne marche pas
je dois obtenir un truc du genre
If (Not IsNull(Me.Modifiable2)) Then
sqlstr = "SELECT formateurs.formateur, lieux.lieu, matieres.matiere,
types.type, editeurs.editeur, documents.intitule, auteurs.Auteur "
sqlstr = sqlstr & "FROM auteurs INNER JOIN (lieux INNER JOIN (types INNER
JOIN (formateurs INNER JOIN (matieres INNER JOIN (editeurs INNER JOIN
documents ON editeurs.editeur = documents.editeur) ON matieres.matiere =
documents.matiere) ON formateurs.formateur = documents.formateur) ON
types.type = documents.type) ON lieux.lieu = documents.lieu) ON
auteurs.Auteur = documents.auteur "
sqlstr = sqlstr & "WHERE ((lieux.lieu='" & Me.Modifiable2 & "'))& " And ""
End If
If (Not IsNull(Me.Modifiable4)) Then
sqlstr = "SELECT formateurs.formateur, lieux.lieu, matieres.matiere,
types.type, editeurs.editeur, documents.intitule, auteurs.Auteur "
sqlstr = sqlstr & "FROM auteurs INNER JOIN (lieux INNER JOIN (types
INNER JOIN (formateurs INNER JOIN (matieres INNER JOIN (editeurs INNER JOIN
documents ON editeurs.editeur = documents.editeur) ON matieres.matiere =
documents.matiere) ON formateurs.formateur = documents.formateur) ON
types.type = documents.type) ON lieux.lieu = documents.lieu) ON
auteurs.Auteur = documents.auteur "
sqlstr = sqlstr & "WHERE ((matieres.matiere='" & Me.Modifiable4 & "'))&
" And ""
End If
If (Not IsNull(Me.Modifiable11)) Then
sqlstr = "SELECT formateurs.formateur, lieux.lieu, matieres.matiere,
types.type, editeurs.editeur, documents.intitule, auteurs.Auteur "
sqlstr = sqlstr & "FROM auteurs INNER JOIN (lieux INNER JOIN (types INNER
JOIN (formateurs INNER JOIN (matieres INNER JOIN (editeurs INNER JOIN
documents ON editeurs.editeur = documents.editeur) ON matieres.matiere =
documents.matiere) ON formateurs.formateur = documents.formateur) ON
types.type = documents.type) ON lieux.lieu = documents.lieu) ON
auteurs.Auteur = documents.auteur "
sqlstr = sqlstr & "WHERE ((types.type='" & Me.Modifiable11 & "')) & " And ""
End If
If (Not IsNull(Me.Modifiable15)) Then
sqlstr = "SELECT formateurs.formateur, lieux.lieu, matieres.matiere,
types.type, editeurs.editeur, documents.intitule, auteurs.Auteur "
sqlstr = sqlstr & "FROM auteurs INNER JOIN (lieux INNER JOIN (types
INNER JOIN (formateurs INNER JOIN (matieres INNER JOIN (editeurs INNER JOIN
documents ON editeurs.editeur = documents.editeur) ON matieres.matiere =
documents.matiere) ON formateurs.formateur = documents.formateur) ON
types.type = documents.type) ON lieux.lieu = documents.lieu) ON
auteurs.Auteur = documents.auteur "
sqlstr = sqlstr & "WHERE ((editeurs.editeur='" & Me.Modifiable15 & "'))
& " And ""
End If
If (Not IsNull(Me.Modifiable13)) Then
sqlstr = "SELECT formateurs.formateur, lieux.lieu, matieres.matiere,
types.type, editeurs.editeur, documents.intitule, auteurs.Auteur "
sqlstr = sqlstr & "FROM auteurs INNER JOIN (lieux INNER JOIN (types INNER
JOIN (formateurs INNER JOIN (matieres INNER JOIN (editeurs INNER JOIN
documents ON editeurs.editeur = documents.editeur) ON matieres.matiere =
documents.matiere) ON formateurs.formateur = documents.formateur) ON
types.type = documents.type) ON lieux.lieu = documents.lieu) ON
auteurs.Auteur = documents.auteur "
sqlstr = sqlstr & "WHERE ((auteurs.Auteur='" & Me.Modifiable13 & "')) & "
And ""
End If
If (sqlstr = "") Then
Me.Filter = ""
Me.FilterOn = False
Else
sqlstr = "(" & Left$(sqlstr, Len(sqlstr) - 6) & ")"
Me.Filter = sqlstr
Me.FilterOn = True
End If

On Error GoTo Errtest_Click
Set req = CurrentDb.QueryDefs("Req1")
req.SQL = sqlstr
DoCmd.OpenReport "formateurs", acViewPreview
Fintest_Click:
Exit Sub
Errtest_Click:
Set req = CurrentDb.CreateQueryDef("Req1", sqlstr)
Resume Fintest_Click
End Sub
"3stone" a écrit dans le message de news:
%2366AEh%
Salut,

"vincent chinazzi"
| je peux envoyer la base si besoin


inspire toi de ceci :
http://users.skynet.be/accesshome/ah_formulaires_filtragepersonnalise.htm


l'exemple est donner pour la construction d'un filtre, mais le
raisonnement
reste le même pour créer une requête SQL...

c.a.d. uniquement "écrire" les critères pour les listes avec séléctions
!



--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Email : http://www.cerbermail.com/?Xfg61Z3IQw



Avatar
3stone
Salut Jacqueline & Vincent ,

"Jacqueline Labouret"
[...]
| je dois obtenir un truc du genre
| If (Not IsNull(Me.Modifiable2)) Then
| sqlstr = "SELECT formateurs.formateur, lieux.lieu, matieres.matiere,
| types.type, editeurs.editeur, documents.intitule, auteurs.Auteur "
| sqlstr = sqlstr & "FROM auteurs INNER JOIN (lieux INNER JOIN (types INNER
| JOIN (formateurs INNER JOIN (matieres INNER JOIN (editeurs INNER JOIN
| documents ON editeurs.editeur = documents.editeur) ON matieres.matiere | documents.matiere) ON formateurs.formateur = documents.formateur) ON
| types.type = documents.type) ON lieux.lieu = documents.lieu) ON
| auteurs.Auteur = documents.auteur "
| sqlstr = sqlstr & "WHERE ((lieux.lieu='" & Me.Modifiable2 & "'))& " And ""
| End If
<snip>


Pas vraiment cela, non...
Il est entendu que l'on essaie de contruire la clause "Where" du SQL


Dim strSQL as String , strWhere as string

' ci-dessous, la chaine complète *sauf* la partie 'Where...."
strSQL = "Select champ1, champ2, champ3.... " _
& "From .... "

' ici commence le test sur les listes déroulantes
' liste des formateurs
if Not IsNull(Me.lstFormateur) then
strWhere = strWhere _
& "Formateurs.Formateur= '" & Me.lstFormateur & "' AND "
end if
' liste des lieux
if Not IsNull(Me.lstLieu) then
strWhere = strWhere _
& "Lieux.Lieu = '" & Me.lstLieu & "' AND "
end if

' et ainsi de suite....

'puis tester si au moins UNE liste présente
if len(strWhere)>0 then
'supprimer le dernier "and"
strWhere = left(strWhere-(len(strWhere-4))
end if

' construire le SQL
strSQL = strSQL & " Where " & strWhere

Attention:
Pour vérifier la cohérence de la chaine SQL, il est recommandé de l'afficher
soit par un "Debug.Print strSQL" soit pas un "MsgBox strSQL"
Bien vérifier les espaces entre les "morceaux" que l'on concatène !

PS: le code ci-dessus est juste une indication de la méthode,
écrit "en ligne" et sans test ;-))


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Email : http://www.cerbermail.com/?Xfg61Z3IQw
Avatar
3stone
re,

"3stone"
[...]
| Attention:
| Pour vérifier la cohérence de la chaine SQL, il est recommandé de l'afficher
| soit par un "Debug.Print strSQL" soit pas un "MsgBox strSQL"
| Bien vérifier les espaces entre les "morceaux" que l'on concatène !
|
| PS: le code ci-dessus est juste une indication de la méthode,
| écrit "en ligne" et sans test ;-))



[vincent dans ma BAL] :-((

désolé de ne pas repondre par le forum mais la aussi j'ai des problemes pour repondre

j'ai ecrit le code suivant
Private Sub test_Click()
Dim sqlstr As String
Dim wherestr As String
Dim req As QueryDef

sqlstr = "SELECT formateurs.formateur, lieux.lieu,
<snip>


Si nous utilisons un forum (à la place de msn et autres méthodes "égoiste")
c'est pour que nous puissions tous profiter des conversations !!!


Pour ton problème ( j'avais prévenu ;-)

'supprimer le dernier "and"
strWhere = left ( strWhere , len(strWhere) - 6 ) <==== ici


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Email : http://www.cerbermail.com/?Xfg61Z3IQw