OVH Cloud OVH Cloud

Problème de requête

19 réponses
Avatar
Whitetown
Bonjour,
Je souhaite creer une appli permettant de rechercher des recettes selon
différents critères, je souhaite que mon formulaire de recherche soit le plus
modulables possibles, pour cela, l'utilisateur peut choisir les champs dans
lesquels il veut effectuer sa recherche en cochant dans la case
correspondante.

Cette fonctionnalité marche très bien, cependant, je souhaite aller plus
loin, je veux que l'utilisateur puisse rechercher des recettes contenant du
poulet ET du citron par exemple. Pour cela, il tape dans la même zone de
texte "poulet ET citron", cependant, la requête qui est fabriquée par mon
code ne va chercher que les libellés d'ingrédients contenant poulet ET citron
alors que je veux les ingrédients contenant poulet ET les ingredients
contenant Citron....

J'espère que je vous ai suffisament clairement expliqué mon problème.

Je vous joins une partie de mon code au cas où quelqu un pourrait me
débloquer.

en vous remerciant d'avance...


'La requête sera contenue dans la variable "SQL"'
Dim SQL As String


'Requête SQL de base qui selectionne tous les enregistrements de la table
recette'
SQL = "SELECT DISTINCT T_recette.code_prototype as 'Code prototype',
T_recette.libelle_recette as 'Libellé de la recette', T_recette.date_creation
as 'Date', T_recette.note_recette as 'Note',
T_acceptation.libelle_acceptation as
'Accept',T_chef_de_projet.nom_chef_de_projet as 'Chef de projet',
T_gamme.libelle_gamme as 'Gamme' FROM T_acceptation RIGHT JOIN
(T_type_stockage RIGHT JOIN (((T_gamme RIGHT JOIN (T_chef_de_projet RIGHT
JOIN T_recette ON T_chef_de_projet.id_chef_de_projet =
T_recette.id_chef_de_projet) ON T_gamme.id_gamme = T_recette.id_gamme) LEFT
JOIN (T_ingredient RIGHT JOIN T_detail_recette ON
T_ingredient.code_ingredient = T_detail_recette.code_ingredient) ON
T_recette.id_recette = T_detail_recette.id_recette) LEFT JOIN T_stockage ON
T_recette.id_recette = T_stockage.id_recette) ON
T_type_stockage.id_type_stockage = T_stockage.id_type_stockage) ON
T_acceptation.id_acceptation = T_recette.id_acceptation WHERE
T_recette.code_prototype <> '' "


'Si le bouton chk_recette est enfoncé, on cherche tous les enregistrements
qui ont
'un libellé semblable à celui tapé dans la zone de texte libellé'
If Me.Chk_recette = True Then
SQL = SQL & "AND T_recette.libelle_recette like '*" & Me.ZT_libelle & "*'"
End If

'Début du code qui me pose problème...!!!!!!!!!:

'Si le bouton Chk_ingredient est enfoncé, on cherche les recettes pour
lesquelles
'les ingrédients ont un libellé semblable à celui tapé dans la zone de texte
SQL = SQL & "AND ("
Dim chaine As String
Dim longueur As Integer
Dim posET As Integer
Dim posOU As Integer
Dim i As Integer
chaine = Me.ZT_ingredient
longueur = Len(chaine)

For i = 1 To longueur
posET = InStr(i, chaine, " ET ")
posOU = InStr(i, chaine, " OU ")

If posET = i Or posOU = i Then
SQL = SQL & " T_ingredient.libelle_ingredient like '*" & Mid(chaine, 1, i) &
"*'"
If posET = i Then
SQL = SQL & " AND "
Else: SQL = SQL & " OR "
End If
chaine = Mid(chaine, i + 4, longueur - (i + 4))
longueur = Len(chaine)
i = 0
End If

If i = longueur And chaine <> "" Then
SQL = SQL & "T_ingredient.libelle_ingredient like '*" & chaine & "*'"
End If

Next i

'SQL = SQL & ")"

End If

10 réponses

1 2
Avatar
Cbu
Bonjour,
moi j'ai fais un truc du genre :
SELECT TBL_Fonction.FON_Libelle
FROM TBL_Fonction
WHERE TBL_Fonction.FON_Libelle Like "*Bibl*" AND TBL_Fonction.FON_Libelle
Like "*ponsable*";

cela me ramène : "Bibliothécaire responsable"

cela solutionne ton problème ??


Bonjour,
Je souhaite creer une appli permettant de rechercher des recettes selon
différents critères, je souhaite que mon formulaire de recherche soit le plus
modulables possibles, pour cela, l'utilisateur peut choisir les champs dans
lesquels il veut effectuer sa recherche en cochant dans la case
correspondante.

Cette fonctionnalité marche très bien, cependant, je souhaite aller plus
loin, je veux que l'utilisateur puisse rechercher des recettes contenant du
poulet ET du citron par exemple. Pour cela, il tape dans la même zone de
texte "poulet ET citron", cependant, la requête qui est fabriquée par mon
code ne va chercher que les libellés d'ingrédients contenant poulet ET citron
alors que je veux les ingrédients contenant poulet ET les ingredients
contenant Citron....

J'espère que je vous ai suffisament clairement expliqué mon problème.

Je vous joins une partie de mon code au cas où quelqu un pourrait me
débloquer.

en vous remerciant d'avance...


'La requête sera contenue dans la variable "SQL"'
Dim SQL As String


'Requête SQL de base qui selectionne tous les enregistrements de la table
recette'
SQL = "SELECT DISTINCT T_recette.code_prototype as 'Code prototype',
T_recette.libelle_recette as 'Libellé de la recette', T_recette.date_creation
as 'Date', T_recette.note_recette as 'Note',
T_acceptation.libelle_acceptation as
'Accept',T_chef_de_projet.nom_chef_de_projet as 'Chef de projet',
T_gamme.libelle_gamme as 'Gamme' FROM T_acceptation RIGHT JOIN
(T_type_stockage RIGHT JOIN (((T_gamme RIGHT JOIN (T_chef_de_projet RIGHT
JOIN T_recette ON T_chef_de_projet.id_chef_de_projet =
T_recette.id_chef_de_projet) ON T_gamme.id_gamme = T_recette.id_gamme) LEFT
JOIN (T_ingredient RIGHT JOIN T_detail_recette ON
T_ingredient.code_ingredient = T_detail_recette.code_ingredient) ON
T_recette.id_recette = T_detail_recette.id_recette) LEFT JOIN T_stockage ON
T_recette.id_recette = T_stockage.id_recette) ON
T_type_stockage.id_type_stockage = T_stockage.id_type_stockage) ON
T_acceptation.id_acceptation = T_recette.id_acceptation WHERE
T_recette.code_prototype <> '' "


'Si le bouton chk_recette est enfoncé, on cherche tous les enregistrements
qui ont
'un libellé semblable à celui tapé dans la zone de texte libellé'
If Me.Chk_recette = True Then
SQL = SQL & "AND T_recette.libelle_recette like '*" & Me.ZT_libelle & "*'"
End If

'Début du code qui me pose problème...!!!!!!!!!:

'Si le bouton Chk_ingredient est enfoncé, on cherche les recettes pour
lesquelles
'les ingrédients ont un libellé semblable à celui tapé dans la zone de texte
SQL = SQL & "AND ("
Dim chaine As String
Dim longueur As Integer
Dim posET As Integer
Dim posOU As Integer
Dim i As Integer
chaine = Me.ZT_ingredient
longueur = Len(chaine)

For i = 1 To longueur
posET = InStr(i, chaine, " ET ")
posOU = InStr(i, chaine, " OU ")

If posET = i Or posOU = i Then
SQL = SQL & " T_ingredient.libelle_ingredient like '*" & Mid(chaine, 1, i) &
"*'"
If posET = i Then
SQL = SQL & " AND "
Else: SQL = SQL & " OR "
End If
chaine = Mid(chaine, i + 4, longueur - (i + 4))
longueur = Len(chaine)
i = 0
End If

If i = longueur And chaine <> "" Then
SQL = SQL & "T_ingredient.libelle_ingredient like '*" & chaine & "*'"
End If

Next i

'SQL = SQL & ")"

End If


Avatar
Whitetown
Bonjour,
malheureusement, cela ne solutionne pas mon problème, j'ai ommis de préciser
qu' une recette contenait plusieurs ingrédients donc je veux une recette qui
contient un ingredient like"*poulet*" ET un ingredient like "*citron*"

ta solution ne fonctionne que pour chercher deux chaines de caractères dans
un même libellé...

mais merci quand même ;)




Bonjour,
moi j'ai fais un truc du genre :
SELECT TBL_Fonction.FON_Libelle
FROM TBL_Fonction
WHERE TBL_Fonction.FON_Libelle Like "*Bibl*" AND TBL_Fonction.FON_Libelle
Like "*ponsable*";

cela me ramène : "Bibliothécaire responsable"

cela solutionne ton problème ??


Bonjour,
Je souhaite creer une appli permettant de rechercher des recettes selon
différents critères, je souhaite que mon formulaire de recherche soit le plus
modulables possibles, pour cela, l'utilisateur peut choisir les champs dans
lesquels il veut effectuer sa recherche en cochant dans la case
correspondante.

Cette fonctionnalité marche très bien, cependant, je souhaite aller plus
loin, je veux que l'utilisateur puisse rechercher des recettes contenant du
poulet ET du citron par exemple. Pour cela, il tape dans la même zone de
texte "poulet ET citron", cependant, la requête qui est fabriquée par mon
code ne va chercher que les libellés d'ingrédients contenant poulet ET citron
alors que je veux les ingrédients contenant poulet ET les ingredients
contenant Citron....

J'espère que je vous ai suffisament clairement expliqué mon problème.

Je vous joins une partie de mon code au cas où quelqu un pourrait me
débloquer.

en vous remerciant d'avance...


'La requête sera contenue dans la variable "SQL"'
Dim SQL As String


'Requête SQL de base qui selectionne tous les enregistrements de la table
recette'
SQL = "SELECT DISTINCT T_recette.code_prototype as 'Code prototype',
T_recette.libelle_recette as 'Libellé de la recette', T_recette.date_creation
as 'Date', T_recette.note_recette as 'Note',
T_acceptation.libelle_acceptation as
'Accept',T_chef_de_projet.nom_chef_de_projet as 'Chef de projet',
T_gamme.libelle_gamme as 'Gamme' FROM T_acceptation RIGHT JOIN
(T_type_stockage RIGHT JOIN (((T_gamme RIGHT JOIN (T_chef_de_projet RIGHT
JOIN T_recette ON T_chef_de_projet.id_chef_de_projet =
T_recette.id_chef_de_projet) ON T_gamme.id_gamme = T_recette.id_gamme) LEFT
JOIN (T_ingredient RIGHT JOIN T_detail_recette ON
T_ingredient.code_ingredient = T_detail_recette.code_ingredient) ON
T_recette.id_recette = T_detail_recette.id_recette) LEFT JOIN T_stockage ON
T_recette.id_recette = T_stockage.id_recette) ON
T_type_stockage.id_type_stockage = T_stockage.id_type_stockage) ON
T_acceptation.id_acceptation = T_recette.id_acceptation WHERE
T_recette.code_prototype <> '' "


'Si le bouton chk_recette est enfoncé, on cherche tous les enregistrements
qui ont
'un libellé semblable à celui tapé dans la zone de texte libellé'
If Me.Chk_recette = True Then
SQL = SQL & "AND T_recette.libelle_recette like '*" & Me.ZT_libelle & "*'"
End If

'Début du code qui me pose problème...!!!!!!!!!:

'Si le bouton Chk_ingredient est enfoncé, on cherche les recettes pour
lesquelles
'les ingrédients ont un libellé semblable à celui tapé dans la zone de texte
SQL = SQL & "AND ("
Dim chaine As String
Dim longueur As Integer
Dim posET As Integer
Dim posOU As Integer
Dim i As Integer
chaine = Me.ZT_ingredient
longueur = Len(chaine)

For i = 1 To longueur
posET = InStr(i, chaine, " ET ")
posOU = InStr(i, chaine, " OU ")

If posET = i Or posOU = i Then
SQL = SQL & " T_ingredient.libelle_ingredient like '*" & Mid(chaine, 1, i) &
"*'"
If posET = i Then
SQL = SQL & " AND "
Else: SQL = SQL & " OR "
End If
chaine = Mid(chaine, i + 4, longueur - (i + 4))
longueur = Len(chaine)
i = 0
End If

If i = longueur And chaine <> "" Then
SQL = SQL & "T_ingredient.libelle_ingredient like '*" & chaine & "*'"
End If

Next i

'SQL = SQL & ")"

End If




Avatar
Laurent DUBUC
Bonjour,
et pourquoi pas OR au lieu de AND

"Whitetown" a écrit dans le message de
news:
Bonjour,
malheureusement, cela ne solutionne pas mon problème, j'ai ommis de
préciser
qu' une recette contenait plusieurs ingrédients donc je veux une recette
qui
contient un ingredient like"*poulet*" ET un ingredient like "*citron*"

ta solution ne fonctionne que pour chercher deux chaines de caractères
dans
un même libellé...

mais merci quand même ;)




Bonjour,
moi j'ai fais un truc du genre :
SELECT TBL_Fonction.FON_Libelle
FROM TBL_Fonction
WHERE TBL_Fonction.FON_Libelle Like "*Bibl*" AND TBL_Fonction.FON_Libelle
Like "*ponsable*";

cela me ramène : "Bibliothécaire responsable"

cela solutionne ton problème ??


Bonjour,
Je souhaite creer une appli permettant de rechercher des recettes selon
différents critères, je souhaite que mon formulaire de recherche soit
le plus
modulables possibles, pour cela, l'utilisateur peut choisir les champs
dans
lesquels il veut effectuer sa recherche en cochant dans la case
correspondante.

Cette fonctionnalité marche très bien, cependant, je souhaite aller
plus
loin, je veux que l'utilisateur puisse rechercher des recettes
contenant du
poulet ET du citron par exemple. Pour cela, il tape dans la même zone
de
texte "poulet ET citron", cependant, la requête qui est fabriquée par
mon
code ne va chercher que les libellés d'ingrédients contenant poulet ET
citron
alors que je veux les ingrédients contenant poulet ET les ingredients
contenant Citron....

J'espère que je vous ai suffisament clairement expliqué mon problème.

Je vous joins une partie de mon code au cas où quelqu un pourrait me
débloquer.

en vous remerciant d'avance...


'La requête sera contenue dans la variable "SQL"'
Dim SQL As String


'Requête SQL de base qui selectionne tous les enregistrements de la
table
recette'
SQL = "SELECT DISTINCT T_recette.code_prototype as 'Code prototype',
T_recette.libelle_recette as 'Libellé de la recette',
T_recette.date_creation
as 'Date', T_recette.note_recette as 'Note',
T_acceptation.libelle_acceptation as
'Accept',T_chef_de_projet.nom_chef_de_projet as 'Chef de projet',
T_gamme.libelle_gamme as 'Gamme' FROM T_acceptation RIGHT JOIN
(T_type_stockage RIGHT JOIN (((T_gamme RIGHT JOIN (T_chef_de_projet
RIGHT
JOIN T_recette ON T_chef_de_projet.id_chef_de_projet >> > T_recette.id_chef_de_projet) ON T_gamme.id_gamme = T_recette.id_gamme)
LEFT
JOIN (T_ingredient RIGHT JOIN T_detail_recette ON
T_ingredient.code_ingredient = T_detail_recette.code_ingredient) ON
T_recette.id_recette = T_detail_recette.id_recette) LEFT JOIN
T_stockage ON
T_recette.id_recette = T_stockage.id_recette) ON
T_type_stockage.id_type_stockage = T_stockage.id_type_stockage) ON
T_acceptation.id_acceptation = T_recette.id_acceptation WHERE
T_recette.code_prototype <> '' "


'Si le bouton chk_recette est enfoncé, on cherche tous les
enregistrements
qui ont
'un libellé semblable à celui tapé dans la zone de texte libellé'
If Me.Chk_recette = True Then
SQL = SQL & "AND T_recette.libelle_recette like '*" & Me.ZT_libelle &
"*'"
End If

'Début du code qui me pose problème...!!!!!!!!!:

'Si le bouton Chk_ingredient est enfoncé, on cherche les recettes pour
lesquelles
'les ingrédients ont un libellé semblable à celui tapé dans la zone de
texte
SQL = SQL & "AND ("
Dim chaine As String
Dim longueur As Integer
Dim posET As Integer
Dim posOU As Integer
Dim i As Integer
chaine = Me.ZT_ingredient
longueur = Len(chaine)

For i = 1 To longueur
posET = InStr(i, chaine, " ET ")
posOU = InStr(i, chaine, " OU ")

If posET = i Or posOU = i Then
SQL = SQL & " T_ingredient.libelle_ingredient like '*" & Mid(chaine, 1,
i) &
"*'"
If posET = i Then
SQL = SQL & " AND "
Else: SQL = SQL & " OR "
End If
chaine = Mid(chaine, i + 4, longueur - (i + 4))
longueur = Len(chaine)
i = 0
End If

If i = longueur And chaine <> "" Then
SQL = SQL & "T_ingredient.libelle_ingredient like '*" & chaine & "*'"
End If

Next i

'SQL = SQL & ")"

End If






Avatar
Cbu
Ahhhhh !
moi en avoir compris.... Bon bah tu vas devoir passer par un IN :
SELECT TBL_Fonction.FON_Libelle
FROM TBL_Fonction
WHERE TBL_Fonction.FON_Libelle IN (Select TBL_Fonction.FON_Libelle FROM
TBL_Fonction WHERE "*Bibl*" AND TBL_Fonction.FON_Libelle
Like "*ponsable*");

Sinon si j'ai toujours pas pigé p-e celui ci :
SELECT TBL_Fonction.FON_Libelle
FROM TBL_Fonction
WHERE TBL_Fonction.FON_Libelle like "*Bibl*" OR TBL_Fonction.FON_Libelle
Like "*ponsable*";
???

Bon en espérant que tu trouves ta solution...
Cbu



Bonjour,
malheureusement, cela ne solutionne pas mon problème, j'ai ommis de préciser
qu' une recette contenait plusieurs ingrédients donc je veux une recette qui
contient un ingredient like"*poulet*" ET un ingredient like "*citron*"

ta solution ne fonctionne que pour chercher deux chaines de caractères dans
un même libellé...

mais merci quand même ;)




Bonjour,
moi j'ai fais un truc du genre :
SELECT TBL_Fonction.FON_Libelle
FROM TBL_Fonction
WHERE TBL_Fonction.FON_Libelle Like "*Bibl*" AND TBL_Fonction.FON_Libelle
Like "*ponsable*";

cela me ramène : "Bibliothécaire responsable"

cela solutionne ton problème ??


Bonjour,
Je souhaite creer une appli permettant de rechercher des recettes selon
différents critères, je souhaite que mon formulaire de recherche soit le plus
modulables possibles, pour cela, l'utilisateur peut choisir les champs dans
lesquels il veut effectuer sa recherche en cochant dans la case
correspondante.

Cette fonctionnalité marche très bien, cependant, je souhaite aller plus
loin, je veux que l'utilisateur puisse rechercher des recettes contenant du
poulet ET du citron par exemple. Pour cela, il tape dans la même zone de
texte "poulet ET citron", cependant, la requête qui est fabriquée par mon
code ne va chercher que les libellés d'ingrédients contenant poulet ET citron
alors que je veux les ingrédients contenant poulet ET les ingredients
contenant Citron....

J'espère que je vous ai suffisament clairement expliqué mon problème.

Je vous joins une partie de mon code au cas où quelqu un pourrait me
débloquer.

en vous remerciant d'avance...


'La requête sera contenue dans la variable "SQL"'
Dim SQL As String


'Requête SQL de base qui selectionne tous les enregistrements de la table
recette'
SQL = "SELECT DISTINCT T_recette.code_prototype as 'Code prototype',
T_recette.libelle_recette as 'Libellé de la recette', T_recette.date_creation
as 'Date', T_recette.note_recette as 'Note',
T_acceptation.libelle_acceptation as
'Accept',T_chef_de_projet.nom_chef_de_projet as 'Chef de projet',
T_gamme.libelle_gamme as 'Gamme' FROM T_acceptation RIGHT JOIN
(T_type_stockage RIGHT JOIN (((T_gamme RIGHT JOIN (T_chef_de_projet RIGHT
JOIN T_recette ON T_chef_de_projet.id_chef_de_projet =
T_recette.id_chef_de_projet) ON T_gamme.id_gamme = T_recette.id_gamme) LEFT
JOIN (T_ingredient RIGHT JOIN T_detail_recette ON
T_ingredient.code_ingredient = T_detail_recette.code_ingredient) ON
T_recette.id_recette = T_detail_recette.id_recette) LEFT JOIN T_stockage ON
T_recette.id_recette = T_stockage.id_recette) ON
T_type_stockage.id_type_stockage = T_stockage.id_type_stockage) ON
T_acceptation.id_acceptation = T_recette.id_acceptation WHERE
T_recette.code_prototype <> '' "


'Si le bouton chk_recette est enfoncé, on cherche tous les enregistrements
qui ont
'un libellé semblable à celui tapé dans la zone de texte libellé'
If Me.Chk_recette = True Then
SQL = SQL & "AND T_recette.libelle_recette like '*" & Me.ZT_libelle & "*'"
End If

'Début du code qui me pose problème...!!!!!!!!!:

'Si le bouton Chk_ingredient est enfoncé, on cherche les recettes pour
lesquelles
'les ingrédients ont un libellé semblable à celui tapé dans la zone de texte
SQL = SQL & "AND ("
Dim chaine As String
Dim longueur As Integer
Dim posET As Integer
Dim posOU As Integer
Dim i As Integer
chaine = Me.ZT_ingredient
longueur = Len(chaine)

For i = 1 To longueur
posET = InStr(i, chaine, " ET ")
posOU = InStr(i, chaine, " OU ")

If posET = i Or posOU = i Then
SQL = SQL & " T_ingredient.libelle_ingredient like '*" & Mid(chaine, 1, i) &
"*'"
If posET = i Then
SQL = SQL & " AND "
Else: SQL = SQL & " OR "
End If
chaine = Mid(chaine, i + 4, longueur - (i + 4))
longueur = Len(chaine)
i = 0
End If

If i = longueur And chaine <> "" Then
SQL = SQL & "T_ingredient.libelle_ingredient like '*" & chaine & "*'"
End If

Next i

'SQL = SQL & ")"

End If






Avatar
Whitetown
OR fonctionne tres bien, si je lui tape poulet ou saint jacques, il me sort
toutes les recettes de poulet et toutes les recettes de st jacques....il vien
bien chercher les recettes qui ont un poulet dans leurs libellé ingrédient ou
un st jacques...

Pour le ET, si je tape poulet ET curry, il ne me trouve rien alors que j'ai
bien une recette qui correspond à ca, si je tape poulet et *cu*, il me trouve
ma recette de poulet au curry, sauf qu'il la trouve grâce au fait que mon
ingredient poulet a pour libellé "poulet cuisse 125g"....il cherche donc dans
un ingrédient les deux termes...

j ai tenté le IN mais on me renvoi une erreur :
"erreur 3075 erreur de syntaxe (opérateur absent) dans l'expression
'T_recette.code_prototype <> '' AND WHERE T_detail_recette.libelle_ingredient
IN ( SELECT T_detail_recette.libelle_ingredient FROM T_detail_recette WHERE
T_ingredient.libelle_ingredient like'*poulet*' AND
T_ingredient.libelle_ingredient like '*curry*')'.

le code correspondant étant

If Me.Chk_ingredient = True Then

SQL = SQL & "AND WHERE T_detail_recette.libelle_ingredient IN (
SELECT T_detail_recette.libelle_ingredient FROM T_detail_recette WHERE "

Dim chaine As String
Dim longueur As Integer
Dim posET As Integer
Dim posOU As Integer
Dim i As Integer
chaine = Me.ZT_ingredient
longueur = Len(chaine)
i = 1
For i = 1 To longueur
posET = InStr(i, chaine, " ET ")
posOU = InStr(i, chaine, " OU ")

If posET = i Or posOU = i Then
SQL = SQL & " T_ingredient.libelle_ingredient like
'*" & Mid(chaine, 1, i) & "*'"
If posET = i Then
SQL = SQL & " AND "
Else: SQL = SQL & " OR "
End If
chaine = Mid(chaine, i + 4, longueur - (i + 4))
longueur = Len(chaine)
i = 0
End If

If i = longueur And chaine <> "" Then
SQL = SQL & " T_ingredient.libelle_ingredient like '*" &
chaine & "*')"
End If

Next i


End If

SQL = SQL & ";"










Bonjour,
et pourquoi pas OR au lieu de AND

"Whitetown" a écrit dans le message de
news:
Bonjour,
malheureusement, cela ne solutionne pas mon problème, j'ai ommis de
préciser
qu' une recette contenait plusieurs ingrédients donc je veux une recette
qui
contient un ingredient like"*poulet*" ET un ingredient like "*citron*"

ta solution ne fonctionne que pour chercher deux chaines de caractères
dans
un même libellé...

mais merci quand même ;)




Bonjour,
moi j'ai fais un truc du genre :
SELECT TBL_Fonction.FON_Libelle
FROM TBL_Fonction
WHERE TBL_Fonction.FON_Libelle Like "*Bibl*" AND TBL_Fonction.FON_Libelle
Like "*ponsable*";

cela me ramène : "Bibliothécaire responsable"

cela solutionne ton problème ??


Bonjour,
Je souhaite creer une appli permettant de rechercher des recettes selon
différents critères, je souhaite que mon formulaire de recherche soit
le plus
modulables possibles, pour cela, l'utilisateur peut choisir les champs
dans
lesquels il veut effectuer sa recherche en cochant dans la case
correspondante.

Cette fonctionnalité marche très bien, cependant, je souhaite aller
plus
loin, je veux que l'utilisateur puisse rechercher des recettes
contenant du
poulet ET du citron par exemple. Pour cela, il tape dans la même zone
de
texte "poulet ET citron", cependant, la requête qui est fabriquée par
mon
code ne va chercher que les libellés d'ingrédients contenant poulet ET
citron
alors que je veux les ingrédients contenant poulet ET les ingredients
contenant Citron....

J'espère que je vous ai suffisament clairement expliqué mon problème.

Je vous joins une partie de mon code au cas où quelqu un pourrait me
débloquer.

en vous remerciant d'avance...


'La requête sera contenue dans la variable "SQL"'
Dim SQL As String


'Requête SQL de base qui selectionne tous les enregistrements de la
table
recette'
SQL = "SELECT DISTINCT T_recette.code_prototype as 'Code prototype',
T_recette.libelle_recette as 'Libellé de la recette',
T_recette.date_creation
as 'Date', T_recette.note_recette as 'Note',
T_acceptation.libelle_acceptation as
'Accept',T_chef_de_projet.nom_chef_de_projet as 'Chef de projet',
T_gamme.libelle_gamme as 'Gamme' FROM T_acceptation RIGHT JOIN
(T_type_stockage RIGHT JOIN (((T_gamme RIGHT JOIN (T_chef_de_projet
RIGHT
JOIN T_recette ON T_chef_de_projet.id_chef_de_projet > >> > T_recette.id_chef_de_projet) ON T_gamme.id_gamme = T_recette.id_gamme)
LEFT
JOIN (T_ingredient RIGHT JOIN T_detail_recette ON
T_ingredient.code_ingredient = T_detail_recette.code_ingredient) ON
T_recette.id_recette = T_detail_recette.id_recette) LEFT JOIN
T_stockage ON
T_recette.id_recette = T_stockage.id_recette) ON
T_type_stockage.id_type_stockage = T_stockage.id_type_stockage) ON
T_acceptation.id_acceptation = T_recette.id_acceptation WHERE
T_recette.code_prototype <> '' "


'Si le bouton chk_recette est enfoncé, on cherche tous les
enregistrements
qui ont
'un libellé semblable à celui tapé dans la zone de texte libellé'
If Me.Chk_recette = True Then
SQL = SQL & "AND T_recette.libelle_recette like '*" & Me.ZT_libelle &
"*'"
End If

'Début du code qui me pose problème...!!!!!!!!!:

'Si le bouton Chk_ingredient est enfoncé, on cherche les recettes pour
lesquelles
'les ingrédients ont un libellé semblable à celui tapé dans la zone de
texte
SQL = SQL & "AND ("
Dim chaine As String
Dim longueur As Integer
Dim posET As Integer
Dim posOU As Integer
Dim i As Integer
chaine = Me.ZT_ingredient
longueur = Len(chaine)

For i = 1 To longueur
posET = InStr(i, chaine, " ET ")
posOU = InStr(i, chaine, " OU ")

If posET = i Or posOU = i Then
SQL = SQL & " T_ingredient.libelle_ingredient like '*" & Mid(chaine, 1,
i) &
"*'"
If posET = i Then
SQL = SQL & " AND "
Else: SQL = SQL & " OR "
End If
chaine = Mid(chaine, i + 4, longueur - (i + 4))
longueur = Len(chaine)
i = 0
End If

If i = longueur And chaine <> "" Then
SQL = SQL & "T_ingredient.libelle_ingredient like '*" & chaine & "*'"
End If

Next i

'SQL = SQL & ")"

End If











Avatar
Laurent DUBUC
bonjour,
et qcch comme celà, *poulet*curry* ou *curry*poulet*

"Whitetown" a écrit dans le message de
news:
OR fonctionne tres bien, si je lui tape poulet ou saint jacques, il me
sort
toutes les recettes de poulet et toutes les recettes de st jacques....il
vien
bien chercher les recettes qui ont un poulet dans leurs libellé ingrédient
ou
un st jacques...

Pour le ET, si je tape poulet ET curry, il ne me trouve rien alors que
j'ai
bien une recette qui correspond à ca, si je tape poulet et *cu*, il me
trouve
ma recette de poulet au curry, sauf qu'il la trouve grâce au fait que mon
ingredient poulet a pour libellé "poulet cuisse 125g"....il cherche donc
dans
un ingrédient les deux termes...

j ai tenté le IN mais on me renvoi une erreur :
"erreur 3075 erreur de syntaxe (opérateur absent) dans l'expression
'T_recette.code_prototype <> '' AND WHERE
T_detail_recette.libelle_ingredient
IN ( SELECT T_detail_recette.libelle_ingredient FROM T_detail_recette
WHERE
T_ingredient.libelle_ingredient like'*poulet*' AND
T_ingredient.libelle_ingredient like '*curry*')'.

le code correspondant étant

If Me.Chk_ingredient = True Then

SQL = SQL & "AND WHERE T_detail_recette.libelle_ingredient IN (
SELECT T_detail_recette.libelle_ingredient FROM T_detail_recette WHERE "

Dim chaine As String
Dim longueur As Integer
Dim posET As Integer
Dim posOU As Integer
Dim i As Integer
chaine = Me.ZT_ingredient
longueur = Len(chaine)
i = 1
For i = 1 To longueur
posET = InStr(i, chaine, " ET ")
posOU = InStr(i, chaine, " OU ")

If posET = i Or posOU = i Then
SQL = SQL & " T_ingredient.libelle_ingredient like
'*" & Mid(chaine, 1, i) & "*'"
If posET = i Then
SQL = SQL & " AND "
Else: SQL = SQL & " OR "
End If
chaine = Mid(chaine, i + 4, longueur - (i + 4))
longueur = Len(chaine)
i = 0
End If

If i = longueur And chaine <> "" Then
SQL = SQL & " T_ingredient.libelle_ingredient like '*"
&
chaine & "*')"
End If

Next i


End If

SQL = SQL & ";"










Bonjour,
et pourquoi pas OR au lieu de AND

"Whitetown" a écrit dans le message
de
news:
Bonjour,
malheureusement, cela ne solutionne pas mon problème, j'ai ommis de
préciser
qu' une recette contenait plusieurs ingrédients donc je veux une
recette
qui
contient un ingredient like"*poulet*" ET un ingredient like "*citron*"

ta solution ne fonctionne que pour chercher deux chaines de caractères
dans
un même libellé...

mais merci quand même ;)




Bonjour,
moi j'ai fais un truc du genre :
SELECT TBL_Fonction.FON_Libelle
FROM TBL_Fonction
WHERE TBL_Fonction.FON_Libelle Like "*Bibl*" AND
TBL_Fonction.FON_Libelle
Like "*ponsable*";

cela me ramène : "Bibliothécaire responsable"

cela solutionne ton problème ??


Bonjour,
Je souhaite creer une appli permettant de rechercher des recettes
selon
différents critères, je souhaite que mon formulaire de recherche
soit
le plus
modulables possibles, pour cela, l'utilisateur peut choisir les
champs
dans
lesquels il veut effectuer sa recherche en cochant dans la case
correspondante.

Cette fonctionnalité marche très bien, cependant, je souhaite aller
plus
loin, je veux que l'utilisateur puisse rechercher des recettes
contenant du
poulet ET du citron par exemple. Pour cela, il tape dans la même
zone
de
texte "poulet ET citron", cependant, la requête qui est fabriquée
par
mon
code ne va chercher que les libellés d'ingrédients contenant poulet
ET
citron
alors que je veux les ingrédients contenant poulet ET les
ingredients
contenant Citron....

J'espère que je vous ai suffisament clairement expliqué mon
problème.

Je vous joins une partie de mon code au cas où quelqu un pourrait me
débloquer.

en vous remerciant d'avance...


'La requête sera contenue dans la variable "SQL"'
Dim SQL As String


'Requête SQL de base qui selectionne tous les enregistrements de la
table
recette'
SQL = "SELECT DISTINCT T_recette.code_prototype as 'Code prototype',
T_recette.libelle_recette as 'Libellé de la recette',
T_recette.date_creation
as 'Date', T_recette.note_recette as 'Note',
T_acceptation.libelle_acceptation as
'Accept',T_chef_de_projet.nom_chef_de_projet as 'Chef de projet',
T_gamme.libelle_gamme as 'Gamme' FROM T_acceptation RIGHT JOIN
(T_type_stockage RIGHT JOIN (((T_gamme RIGHT JOIN (T_chef_de_projet
RIGHT
JOIN T_recette ON T_chef_de_projet.id_chef_de_projet >> >> > T_recette.id_chef_de_projet) ON T_gamme.id_gamme =
T_recette.id_gamme)
LEFT
JOIN (T_ingredient RIGHT JOIN T_detail_recette ON
T_ingredient.code_ingredient = T_detail_recette.code_ingredient) ON
T_recette.id_recette = T_detail_recette.id_recette) LEFT JOIN
T_stockage ON
T_recette.id_recette = T_stockage.id_recette) ON
T_type_stockage.id_type_stockage = T_stockage.id_type_stockage) ON
T_acceptation.id_acceptation = T_recette.id_acceptation WHERE
T_recette.code_prototype <> '' "


'Si le bouton chk_recette est enfoncé, on cherche tous les
enregistrements
qui ont
'un libellé semblable à celui tapé dans la zone de texte libellé'
If Me.Chk_recette = True Then
SQL = SQL & "AND T_recette.libelle_recette like '*" & Me.ZT_libelle
&
"*'"
End If

'Début du code qui me pose problème...!!!!!!!!!:

'Si le bouton Chk_ingredient est enfoncé, on cherche les recettes
pour
lesquelles
'les ingrédients ont un libellé semblable à celui tapé dans la zone
de
texte
SQL = SQL & "AND ("
Dim chaine As String
Dim longueur As Integer
Dim posET As Integer
Dim posOU As Integer
Dim i As Integer
chaine = Me.ZT_ingredient
longueur = Len(chaine)

For i = 1 To longueur
posET = InStr(i, chaine, " ET ")
posOU = InStr(i, chaine, " OU ")

If posET = i Or posOU = i Then
SQL = SQL & " T_ingredient.libelle_ingredient like '*" & Mid(chaine,
1,
i) &
"*'"
If posET = i Then
SQL = SQL & " AND "
Else: SQL = SQL & " OR "
End If
chaine = Mid(chaine, i + 4, longueur - (i + 4))
longueur = Len(chaine)
i = 0
End If

If i = longueur And chaine <> "" Then
SQL = SQL & "T_ingredient.libelle_ingredient like '*" & chaine &
"*'"
End If

Next i

'SQL = SQL & ")"

End If













Avatar
Whitetown
hélàs ta solution ne fonctionne pas, il faudrait que dans le libellé d'un
ingrédient il y ait a la fois poulet et curry...

au cas où je peux vous envoyer la requête fabriquée pour quelques recherches

- Si on ne tape rien dans le champ libellé ingrédient :

SELECT DISTINCT T_recette.code_prototype as 'Code prototype',
T_recette.libelle_recette as 'Libellé de la recette', T_recette.date_creation
as 'Date', T_recette.note_recette as 'Note',
T_acceptation.libelle_acceptation as
'Accept',T_chef_de_projet.nom_chef_de_projet as 'Chef de projet',
T_gamme.libelle_gamme as 'Gamme' FROM T_acceptation RIGHT JOIN
(T_type_stockage RIGHT JOIN (((T_gamme RIGHT JOIN (T_chef_de_projet RIGHT
JOIN T_recette ON T_chef_de_projet.id_chef_de_projet =
T_recette.id_chef_de_projet) ON T_gamme.id_gamme = T_recette.id_gamme) LEFT
JOIN (T_ingredient RIGHT JOIN T_detail_recette ON
T_ingredient.code_ingredient = T_detail_recette.code_ingredient) ON
T_recette.id_recette = T_detail_recette.id_recette) LEFT JOIN T_stockage ON
T_recette.id_recette = T_stockage.id_recette) ON
T_type_stockage.id_type_stockage = T_stockage.id_type_stockage) ON
T_acceptation.id_acceptation = T_recette.id_acceptation WHERE
T_recette.code_prototype <> '' ;

--------------------------------------------------------------------------------------------------------

- Si on tape poulet dans le champ libelle ingredient :

SELECT DISTINCT T_recette.code_prototype as 'Code prototype',
T_recette.libelle_recette as 'Libellé de la recette', T_recette.date_creation
as 'Date', T_recette.note_recette as 'Note',
T_acceptation.libelle_acceptation as
'Accept',T_chef_de_projet.nom_chef_de_projet as 'Chef de projet',
T_gamme.libelle_gamme as 'Gamme' FROM T_acceptation RIGHT JOIN
(T_type_stockage RIGHT JOIN (((T_gamme RIGHT JOIN (T_chef_de_projet RIGHT
JOIN T_recette ON T_chef_de_projet.id_chef_de_projet =
T_recette.id_chef_de_projet) ON T_gamme.id_gamme = T_recette.id_gamme) LEFT
JOIN (T_ingredient RIGHT JOIN T_detail_recette ON
T_ingredient.code_ingredient = T_detail_recette.code_ingredient) ON
T_recette.id_recette = T_detail_recette.id_recette) LEFT JOIN T_stockage ON
T_recette.id_recette = T_stockage.id_recette) ON
T_type_stockage.id_type_stockage = T_stockage.id_type_stockage) ON
T_acceptation.id_acceptation = T_recette.id_acceptation WHERE
T_recette.code_prototype <> '' AND T_ingredient.libelle_ingredient like
'*poulet*';

- Si on tape poulet et curry

SELECT DISTINCT T_recette.code_prototype as 'Code prototype',
T_recette.libelle_recette as 'Libellé de la recette', T_recette.date_creation
as 'Date', T_recette.note_recette as 'Note',
T_acceptation.libelle_acceptation as
'Accept',T_chef_de_projet.nom_chef_de_projet as 'Chef de projet',
T_gamme.libelle_gamme as 'Gamme' FROM T_acceptation RIGHT JOIN
(T_type_stockage RIGHT JOIN (((T_gamme RIGHT JOIN (T_chef_de_projet RIGHT
JOIN T_recette ON T_chef_de_projet.id_chef_de_projet =
T_recette.id_chef_de_projet) ON T_gamme.id_gamme = T_recette.id_gamme) LEFT
JOIN (T_ingredient RIGHT JOIN T_detail_recette ON
T_ingredient.code_ingredient = T_detail_recette.code_ingredient) ON
T_recette.id_recette = T_detail_recette.id_recette) LEFT JOIN T_stockage ON
T_recette.id_recette = T_stockage.id_recette) ON
T_type_stockage.id_type_stockage = T_stockage.id_type_stockage) ON
T_acceptation.id_acceptation = T_recette.id_acceptation WHERE
T_recette.code_prototype <> '' AND T_ingredient.libelle_ingredient like
'*poulet *' AND T_ingredient.libelle_ingredient like '*curry*';


je rapelle pour finir que la table recette contient que le nom de la
recette, du chef de projet, la date de creation... la table detail recette
contient pour chaque ligne le libellé des ingrédients présents dans la recette

ex :

T_ recette

id_recette libelle_recette chef_de_projet
1;Poulet à l'orientale;Didier Gustin

T_detail_recette
id_ligne_recette id_recette libelle_ingredient
1;1;poulet cuisse 125g
2;1;curry vapeur
3;1;riz basmati
....


Cordialement!
Avatar
Cbu
Bonjour,
quest ce que donne cela :

SELECT DISTINCT T_recette.code_prototype as 'Code prototype',
T_recette.libelle_recette as 'Libellé de la recette', T_recette.date_creation
as 'Date', T_recette.note_recette as 'Note',
T_acceptation.libelle_acceptation as
'Accept',T_chef_de_projet.nom_chef_de_projet as 'Chef de projet',
T_gamme.libelle_gamme as 'Gamme' FROM T_acceptation RIGHT JOIN
(T_type_stockage RIGHT JOIN (((T_gamme RIGHT JOIN (T_chef_de_projet RIGHT
JOIN T_recette ON T_chef_de_projet.id_chef_de_projet =
T_recette.id_chef_de_projet) ON T_gamme.id_gamme = T_recette.id_gamme) LEFT
JOIN (T_ingredient RIGHT JOIN T_detail_recette ON
T_ingredient.code_ingredient = T_detail_recette.code_ingredient) ON
T_recette.id_recette = T_detail_recette.id_recette) LEFT JOIN T_stockage ON
T_recette.id_recette = T_stockage.id_recette) ON
T_type_stockage.id_type_stockage = T_stockage.id_type_stockage) ON
T_acceptation.id_acceptation = T_recette.id_acceptation WHERE
T_recette.code_prototype <> '' AND T_ingredient.libelle_ingredient IN
(Select
T_ingredient.libelle_ingredient FROM T_ingredient WHERE
T_ingredient.libelle_ingredient ='*poulet *' OR
T_ingredient.libelle_ingredient like '*curry*');


Ca meme si cela marche pos cela ne doit pas te sortir d'erreur.... ?
Aller bon courage
Cbu
Avatar
Cbu
arghh je suis pas trop réveillé..
C'est p-e plus cela qui marcherait :

SELECT DISTINCT T_recette.code_prototype as 'Code prototype',
T_recette.libelle_recette as 'Libellé de la recette', T_recette.date_creation
as 'Date', T_recette.note_recette as 'Note',
T_acceptation.libelle_acceptation as
'Accept',T_chef_de_projet.nom_chef_de_projet as 'Chef de projet',
T_gamme.libelle_gamme as 'Gamme' FROM T_acceptation RIGHT JOIN
(T_type_stockage RIGHT JOIN (((T_gamme RIGHT JOIN (T_chef_de_projet RIGHT
JOIN T_recette ON T_chef_de_projet.id_chef_de_projet =
T_recette.id_chef_de_projet) ON T_gamme.id_gamme = T_recette.id_gamme) LEFT
JOIN (T_ingredient RIGHT JOIN T_detail_recette ON
T_ingredient.code_ingredient = T_detail_recette.code_ingredient) ON
T_recette.id_recette = T_detail_recette.id_recette) LEFT JOIN T_stockage ON
T_recette.id_recette = T_stockage.id_recette) ON
T_type_stockage.id_type_stockage = T_stockage.id_type_stockage) ON
T_acceptation.id_acceptation = T_recette.id_acceptation WHERE
T_recette.code_prototype <> '' AND T_ingredient.libelle_ingredient IN
(Select
T_ingredient.libelle_ingredient FROM T_ingredient WHERE
T_ingredient.libelle_ingredient like '*poulet *' AND
T_ingredient.libelle_ingredient like '*curry*');

La cela me parait plus adequat..
bonne journée
Cbu
Avatar
Whitetown
Erreur d'exécution '3342':
champ Memo, OLE ou Hyperlink Object incorrect dans la sous-requête
'T_ingredient.libelle_ingredient'.

saleté de requête.......

merci quand même de m'aider

bonne journée
1 2