Menu déroulant et requête SQL

Streptococcus Messages postés 25 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 18 juillet 2007 - 18 juin 2007 à 17:27
Streptococcus Messages postés 25 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 18 juillet 2007 - 19 juin 2007 à 09:36
Bonjour,
dans le cadre de mon stage je développe une application qui permet de gérer des ordonnances numérisées.
Une des fonctionalité de cette application doit permettre de rechercher une ordonnance qui a été rentrée, et qui est stockée dans la bdd.
 cette recherche se fait sur 3 critères : le service concerné, la date et le nom du patient.
Pour les critères Nom et Service j'ai un menu déroulant avec plusieurs items et un des item, dans les 2 cas est "tous", c'est à dire qu'il permet, en le choisissant de ne pas effectuer de recherche suivant ce critère.

 Pour rechercher la ou les ordonnances, j'utilise une requête SQL classique : SELECT * FROM blabla WHERE nom_patient '"& nom_recherché &"' AND Service '"& service_recherché &"'

nom_recherché et service_recherché sont des variables qui prennent la valeur de l'item selectionné dans le menu déroulant.

 Ma question est : quand je selectionne dans l'un des deux menus l'item "Tous", quelle valeur ou quel caractère dois-je passer à ma variable pour que la requête se fasse sur toutes les entrées de la table. Existe-t-il un caractère "joker" qui remplace n'importe quelle chaîne de caractère, l'équivalent de * en windows ?
 Mes profs d'infos n'ont pas été capables de m'apporter la réponse...
Je pourrais bien sûr faire des boucles If avec des requêtes différentes suivant la valeur des menus déroulant, mais étant donné le nombre de configurations différentes, j'aurais au moins 8 cas différents, ce qui donnerait un code bien peu élégant...s'il n'existe pas de solution à ce problème, je m'y résoudrais pourtant

 Merci d'avance de vos réponses, conseils ou avis
Quentin

4 réponses

cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
18 juin 2007 à 18:43
Salut
La seule méthode propre consiste à supprimer la condition quand tu veux chercher parmi tous.
   Ta requète deviendrait :
   SQL = "SELECT * " & _
         "  FROM blabla " & _
         " WHERE Service = '"& service_recherché & "'"

Sinon, le * se remplace par % en SQL (bizarre que tes profs ne sachent pas ça ...), mais utilise un Like à la place du =
   Ta requète deviendrait :
   SQL = "SELECT * " & _
         "  FROM blabla " & _
         " WHERE nom_patient Like '%' " & _
         "   And Service = '"& service_recherché & "'"
   Mais franchement, évite.

D'autre part, rappelle toi aussi que les syntaxes SQL utilisent des ' comme séparateurs de champ (dans la requète)
Que va t-il se passer quand le nom du patient comportera des ' ? ... Plantage : exemple d'une requète telle qu'elle sera construite par ton programme :
         " WHERE nom_patient = 'toto' "      ' Ok
         " WHERE nom_patient = 'N'djaména' " ' Plantage
car le nombre de ' est impair
Solution : Double le nombre de ' dans le nom avant de le fournir à la requète avec cette simple fonction :
   nom_recherché = Replace(nom_recherché, "'", "''")

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
19 juin 2007 à 00:04
Bonsoir,


SQL = "SELECT * " & _
         "  FROM blabla " & _
         " WHERE ChpDate = #" & date_recherché & "#"


If ItemNom<>"Tous" Then SQL =SQL  & " And Nom = '"  & nom_recherché  & "'"
If ItemService<>"Tous" Then SQL =SQL & " And Service = '"& service_recherché & "'"
 
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
19 juin 2007 à 00:11
Pardon Jack, j' ai oublié tes consignes:
Replace(nom_recherché, "'", "''")
Replace(service_recherché, "'", "''")
0
Streptococcus Messages postés 25 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 18 juillet 2007
19 juin 2007 à 09:36
Merci pour vos réponses.
J'avais effectivement pensé à la solution LIKE = '%' mais cela ne résolvais pas mon problème dans la mesure ou j'aurais été obligé de différencier les requêtes.
Je vais donc m'orienter vers vos solutions mais étant donné que j'ai 3 critères de recherche et deux états dans chaque (renseigné ou non renseigné), si je ne me trompe pas, je vais devoir faire une boucle If avec 2^3 = 8 requêtes différentes. C'est bien ce que je pensait, ça ne sera pas élégant du tout mais bon...
 Merci Jack, je n'avais effectivement pas du tout pensé au cas de figure ou un item rentré comportait des '...
0