Streptococcus
Messages postés25Date d'inscriptionlundi 18 juin 2007StatutMembreDernière intervention18 juillet 2007
-
18 juin 2007 à 17:27
Streptococcus
Messages postés25Date d'inscriptionlundi 18 juin 2007StatutMembreDernière intervention18 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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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
If ItemNom<>"Tous" Then SQL =SQL & " And Nom = '" & nom_recherché & "'"
If ItemService<>"Tous" Then SQL =SQL & " And Service = '"& service_recherché & "'"
Streptococcus
Messages postés25Date d'inscriptionlundi 18 juin 2007StatutMembreDernière intervention18 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 '...