cs_imad_lol
Messages postés90Date d'inscriptionsamedi 18 novembre 2000StatutMembreDernière intervention23 mai 2008
-
27 sept. 2006 à 22:29
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
28 sept. 2006 à 20:59
salut tout le monde.
mon probleme est le suivant :
l'utilisateur saisie une chaine de caractere et il valide ,moi je dois cherché si cette chaine de caractere existe dans ma table et je fait le traitement suivant :
rs.findfirst "libelle like ' " & txtlibelle.text & " ' "
apparement c'est correcte.mais le probleme se pose quand l'utilisateur saisie une chaine ou il ya le caractere ( ' ).dans ce cas il y a un erreur.
je sais commente je peu résoudre ce probleme.
merci d'avance.
Manu --------------------------------------------------------------------------------------------
Avant de poster un message, n'oubliez pas de consulter le reglement.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 28 sept. 2006 à 00:02
Salut
Pour compléter, en SQL, pour utiliser les vrais caractères alors qu'ils représentent des commandes, il suffit de les encadrer avec des crochets :
Exemples :
... Like 'aujourd[']hui' Car le ' est la balise de début et de fin
... Like 'nom[[]1[]]' pour chercher 'nom[1]' car les crochets servent de délimiteurs de bornes, genre [a-z]
... Like '100[%]' pour chercher '100%', car le % est expensif
etc
Donc, si tu rencontres un de ces caractères spéciaux, il faudra les remplacer par [ + le caractère + ]
... avec Replace par exemple :
maChaine = "le texte : je veux 100% de résultat"
If Instr(maChaine, '%') Then machaine = Replace (maChaine, '%', '[%]'
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Champion du monde de boule de cristal - 2005 Le savoir est la seule matière qui s'accroit quand on
Vous n’avez pas trouvé la réponse que vous recherchez ?
econs
Messages postés4030Date d'inscriptionmardi 13 mai 2003StatutMembreDernière intervention23 décembre 200823 28 sept. 2006 à 09:31
imad_lol > Tu as donc là plein de solutions pour que les apostrophes ne soient pas reconnues comme élément de la ligne de commande, mais comme simple texte. A toi de choisir.
Replace(txtlibelle.text,"'","\'")
remplace dans ton texte toutes les apostrophes par \'.
Le caractère \, en SQL, fait perdre le sens du caractère qui le suit. Il ne sera donc pas interprété comme une fin de chaine.
Si textelibelle.Text = aujoud'hui
alors Replace(txtlibelle.Text,"'","\'") = aujourd\'hui
Et çà, SQL le comprend.
La chaine de caractère recherchée vaut alors 'aujourd', et le hui' qui se trouve derrière est interprété comme une erreur de syntaxe
En faisant comme ceci :
rs.findfirst "libelle like ' " & Replace(txtlibelle.text,"'","\'") & " ' "
rs.findfirst "libelle like '
aujourd\'hui
'"
La requête recherchera aujourd'hui dans la table.
Manu
--------------------------------------------------------------------------------------------
Avant de poster un message, n'oubliez pas de consulter le reglement.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 28 sept. 2006 à 20:59
Re
C'est la syntaxe officielle du SQL concernant les caractères comme % ou _ qui ont des significations particulières.
A ma connaissance, un < ou > dans une chaine ne doivent pas être gènants, donc pas utile de le 'baliser' (je n'ai pa fait l'essai).
Je reviens sur ce que je disais, je suis aller peut-être un peu vite :
Le problème du ', c'est qu'il est reconnu comme un délimiteur et je ne pense pas que les [ et ] soient efficaces --> utilise \'
Par contre, pour les caractères comme % _ - [ ou ] eux même, il est nécessaire d'utiliser les [].
De plus, si ta syntaxe passe par VB, tu prépareras ta requète dans une String, donc les " (balise VB), devront être traités aussi en les doublant.
Exemple :
maRequete = "Select * From maTable Where monChamp Like 'toto, alias ""gonzague""'"
Là aussi, Replace " par "" est simple à faire