L'apostrphe me pose un probleme

cs_imad_lol Messages postés 90 Date d'inscription samedi 18 novembre 2000 Statut Membre Dernière intervention 23 mai 2008 - 27 sept. 2006 à 22:29
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 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.

8 réponses

econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
27 sept. 2006 à 22:38
Salut,

En faisant comme ceci :

rs.findfirst "libelle like ' " & Replace(txtlibelle.text,"'","\'") & " ' "

Manu
--------------------------------------------------------------------------------------------
Avant de poster un message, n'oubliez pas de consulter le reglement.
0
cs_imad_lol Messages postés 90 Date d'inscription samedi 18 novembre 2000 Statut Membre Dernière intervention 23 mai 2008
27 sept. 2006 à 22:42
merci pour ta reponse.
mais moi j'aime comprendre ce que j'ecris dans mon code .
donc expliquez moi svp Replace(txtlibelle.text,"'","\'") .
merci
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
27 sept. 2006 à 23:54
En fait j'irais plus comme suit:
rs.findfirst "libelle like '" & Replace(txtlibelle,"'","''") & "'"


Il s'agit de remplacer les apostrophes contenues dans le texte par des doubles-apostrophes (non pas des guillemets)

MPi
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
28 sept. 2006 à 02:50
Humm, trèèès intéressant çà, Jack...

MPi
0
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
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.




Ce que tu faisais au départ :





rs.findfirst "libelle like ' " & txtlibelle.text & " ' " 



=>


rs.findfirst "libelle like '
aujourd'hui'"




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.
0
geobasic Messages postés 69 Date d'inscription jeudi 6 novembre 2003 Statut Membre Dernière intervention 3 octobre 2006
28 sept. 2006 à 14:56
Petite question à Jack: est-ce que les crochets sont utilisables pour les autres opérateurs ( =,<,>...) ou uniquement pour Like ?
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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
0
Rejoignez-nous