Requête SQL avec like et le caractère '

Requête SQL avec like et le caractère ' - SQL/NoSQL - Programmation

Marsh Posté le 01-10-2004 à 17:01:11    

Bonjour à tous !
 
J'ai un problème avec une requête SQL qui utilise un like et un caractère (') :
 
... like 'apparition'
 
Le problème est qu'avant apparition il peut y avoir plusieurs caractères et après aussi, dont le caractère ' et dès qu'il le rencontre, il s'arrête...
 
Est-ce que qqn serait-susceptible de m'aider ????
 
Merci d'avance !!!!!

Reply

Marsh Posté le 01-10-2004 à 17:01:11   

Reply

Marsh Posté le 01-10-2004 à 17:03:11    

Je suis pas sûr d'avoir compris...ce que tu veux, ce sont les champs contenant

Citation :


apparition


 
ou
 

Citation :


'apparition'


 
:??:


Message édité par skeye le 01-10-2004 à 17:03:29

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 01-10-2004 à 17:40:02    

Reformule stp, c'est pas très clair.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 04-10-2004 à 16:40:30    

ta question n'est pas claire, mais à priori, t'as un problème d'échappement des ' lors de l'écriture de ta requête.
 
Pour chercher "j'ai faim" dans une champ, quelquesoit les caractères avant et après, c'est :
 
SELECT *
FROM MATABLE
WHERE MONCHAMP LIKE '%j''ai faim%'
 
Et si tu cherches "100%" alors c'est :
 
SELECT *
FROM MATABLE
WHERE MONCHAMP LIKE '%100%%%'
 
=> En SQL, on double le caractère spécial pour l'échapper. Certains SGBD supportent aussi l'échappement ISO, à savoir : \x

Reply

Marsh Posté le 04-10-2004 à 16:52:36    

Dans la série "répondons à une question alors que son auteur est parti et ne donne plus signe de vie", nous voilà :o


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 04-10-2004 à 17:10:06    

Rectificatif : Dans la série j'étais 15 jours en vacances et j'ai pas dormis de la nuit et donc j'ai la tête dans le c*l et j'arrive pas à regarder les dates des posts parceque c'est trop petit, c'est moi que voilà :p

Reply

Marsh Posté le 04-10-2004 à 17:46:36    

Ou qq chose comme ça ;)


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 04-10-2004 à 17:47:48    

sircam a écrit :

Dans la série "répondons à une question alors que son auteur est parti et ne donne plus signe de vie", nous voilà :o


 
ouais enfin 4 jours c'est pas encore vraiment un vieux topic... Surtout à cheval sur un week-end ; certains ne peuvent se connecter qu'occasionnellement depuis leur école/boulot.


Message édité par antp le 04-10-2004 à 17:48:25

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 04-10-2004 à 19:00:49    

Arjuna a écrit :

Rectificatif : Dans la série j'étais 15 jours en vacances et j'ai pas dormis de la nuit et donc j'ai la tête dans le c*l et j'arrive pas à regarder les dates des posts parceque c'est trop petit, c'est moi que voilà :p


Avoue que c'est pas la date qui t'intéressait mais le pseudo :o

Reply

Marsh Posté le 05-10-2004 à 10:43:54    

Arf ! J'avais pas vu :lol:
 
Une Virginie (j'aime bien ce nom en plus :))
 
Et "GE" :ouch: General Electric ??? C'est ma voisine alors ??? T'es où t'es où t'es où, que je vienne t'expliquer ça de plus près :ange:

Reply

Marsh Posté le 05-10-2004 à 10:43:54   

Reply

Marsh Posté le 05-10-2004 à 10:50:18    

Bandes de petits exités ! Un peu de retenue ! Dès qu'une nana se pointe sur un forum geek, c'est la débandade.  :o
 
Hmmm, je sens qu'il y a un jeu de mot scabreux à faire la-dessus...
[:aline2003]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 05-10-2004 à 11:18:10    

Moi j'avais rien vu, j'avais juste répondu à la question, c'est la faute à Gizmo.
 
PS: Gizmo, fait gaffe, dans ma promo y'avait une fille qu'on appelait Gizmo, alors sauve-toi avant que je te saute dessus aussi :D

Reply

Marsh Posté le 05-10-2004 à 11:31:15    

Arjuna a écrit :

Moi j'avais rien vu, j'avais juste répondu à la question, c'est la faute à Gizmo.


J'te crois pas :p


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 05-10-2004 à 12:15:56    

sisi cai vrai (pis en plus gt pas là au début alors...)

Reply

Marsh Posté le 15-10-2004 à 15:37:33    

:)  :heink:  :sleep
Vraiment désolée, mais j'avais oublié la notification par email...
... et pour mon pseudo, tout s'explique, comme Virginie était déjà pris... j'ai du opter pour VirginieGE, désolée.... en tout cas, vous m'avez bien fait marrer....
Mais revenons à nous moutons....
C'est vrai que j'ai peut-être mal expliquer mon truc alors voilà un bout de code :

Code :
  1. strSQL = "WHERE (COURS.COUBUT LIKE *'*" & Request("MC" ) & "*'*) "


bon, j'ai tenté pas mal de chose, sans succès... et le pb, est que dans MC, je peux très bien avoir qqch du style l'évênement et c'est la M avec le caractère '
Voilà, j'espère vous avoir mieux expliquer mon blème, en tout cas, merci millle fois pour votre aide   :)

Reply

Marsh Posté le 15-10-2004 à 18:07:41    

Déjà, ta ligne contient des erreurs :
1) Request et un objet générique qu'il ne faut pas utiliser. En effet, là tu vas indiférement dans les Cookies, les variables passées en POST (formulaire) ou en GET (url). Utilise Request.Cookies, Request.Form ou Request.QueryString selon ce que tu veux faire. C'est un trou de sécurité énorme sinon, sans parler des perfs qui sont très dégradées.
2) Le LIKE porte sur une chaîne de caractère, contenant un pattern. Là, il y a des bouts de pattern (les *) en dehors de la chaîne. Donc ça ne peut que merder, même si ta variable "MC" ne contient pas de " ' ".
3) N'utilise pas * (syntaxe spécifique aux produits M$, héritée des patterns de MS-DOS, mais le %, qui est le carractère standard SQL. Il n'y a aucune différence dans le fonctionnement si ce n'est que ton programme sera capable de tourner sur n'importe quel SGBD, et pas seulement Access ou MS SQL Server.
 
Donc la requête écrite proprement (sans corriger le problème initial) :
 

Code :
  1. strSQL = "WHERE (COURS.COUBUT LIKE '%" & Request.Form("MC" ) & "%') "


 
(en imaginant que la variable MC provient d'un formulaire avec method "POST" )
 
Pour en revenir au quotes. Relis mon premier message : Pour "échapper" une quote, il faut la doubler.
Donc il faut remplacer les ' par deux ' ('' et non le caractère " ) dans la variable.
 
Tu peux donc faire ceci :
 

Code :
  1. Replace(Request.Form("MC" ), "'", "''" )


 
Deplus, si une personne tapes un % dans la variable, alors au lieu de chercher ce caractère, le SGBD va rechercher n'importe quelle série de caractrère à la place. Il faut donc l'échapper de la même façon :
 

Code :
  1. Replace(Replace(Request.Form("MC" ), "'", "''" ), "%", "%%" )


 
Au final, ça donne ça :
 

Code :
  1. strSQL = "WHERE (COURS.COUBUT LIKE *'*" & Replace(Replace(Request.Form("MC" ), "'", "''" ), "%", "%%" ) & "*'*) "


 
N'oublie pas de modifier Request.Form avec Request.QueryString ou Request.Cookies selon l'endroit où se situe cette variable.

Reply

Marsh Posté le 21-10-2004 à 16:06:01    

Salut à tous....
 
Pour info, j'ai trouvé cette solution qui marche super :
 

Code :
  1. StrSQL="...... WHERE .... LIKE '*" & Replace(MaVariable,"'","''" ) & "*' "


 
Merci à tous de votre aide !  :)  :)

Reply

Marsh Posté le 21-10-2004 à 16:13:10    

C'est un peu ce que je t'ai dit depuis ma première intervention dans ce topic :sarcastic:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed