PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → chaine de caractère dans requete SQL : pb apostrophe
chaine de caractère dans requete SQL : pb apostrophe
Débuté par manu, 04 aoû. 2004 13:29 - 3 réponses
Posté le 04 août 2004 - 13:29
Bonjour.
J'effectue une requete SQL sur une BD en utilisant la fonction :
HExecuteRequeteSQL(Req,hRequeteDefaut,sReq).

voici le code de la clause WHERE de la chaine sReq définissant la requête
:
sReq = [debut req]+...
" WHERE MaTable.Nom LIKE '%"+sNom+'%"
Ainsi ma requete est paramétrée suivant la chaine sNom

Le problème est que la chaine sNom peut contenir des apostrophes et alors
ma requete n'est plus correcte syntaxiquement.
Y'a-il une solution pour contourner ce problème ?
Je vous remercie par avance de votre aide

cordialement.
manu
Posté le 04 août 2004 - 13:49
Il faut que tu crées une fonction qui va isoler ces apostrophes :

********************
FONCTION quote(pCh)

Pos est un entier
Ch est une chaîne

Ch=pCh
Pos=Position(Ch,"'")
TANTQUE Pos>0
Ch=Gauche(Ch,Pos-1)+"''"+Milieu(Ch,Pos+1)
Pos=Position(Ch,"'",Pos+2)
FIN

RENVOYER "'"+Ch+"'"
********************

Il ne te reste plus qu'à indiquer tes requêtes comme cela :
WHERE MaTable.Nom LIKE "+quote("%"+sNom+"%")+"

Ca devrait marcher.




"manu" <enj.manu026@netcourrier.com> wrote:


Bonjour.
J'effectue une requete SQL sur une BD en utilisant la fonction :
HExecuteRequeteSQL(Req,hRequeteDefaut,sReq).

voici le code de la clause WHERE de la chaine sReq définissant la requête
:
sReq = [debut req]+...
" WHERE MaTable.Nom LIKE '%"+sNom+'%"
Ainsi ma requete est paramétrée suivant la chaine sNom

Le problème est que la chaine sNom peut contenir des apostrophes et alors
ma requete n'est plus correcte syntaxiquement.
Y'a-il une solution pour contourner ce problème ?
Je vous remercie par avance de votre aide

cordialement.
manu
Posté le 04 août 2004 - 15:49
"manu" <enj.manu026@netcourrier.com> wrote:


Bonjour.
J'effectue une requete SQL sur une BD en utilisant la fonction :
HExecuteRequeteSQL(Req,hRequeteDefaut,sReq).

voici le code de la clause WHERE de la chaine sReq définissant la requête
:
sReq = [debut req]+...
" WHERE MaTable.Nom LIKE '%"+sNom+'%"
Ainsi ma requete est paramétrée suivant la chaine sNom

Le problème est que la chaine sNom peut contenir des apostrophes et alors
ma requete n'est plus correcte syntaxiquement.
Y'a-il une solution pour contourner ce problème ?
Je vous remercie par avance de votre aide

cordialement.
manu

Ha, ces apostrophes !!
Comme d'habitude avec les chaînes de caractères, pour obtenir une apostrophe,
il faut en mettre 2.
Pour cela, la fonction "Remplace" de Windev fait tout à fait l'affaire. Il
suffit d'écrire remplace(snom,"'","''") pour que toutes les apostrophes de
la chaîne snom soient transformées en deux apostrophes et la requête fonctionne
!!
Bonne continuation !!
Posté le 04 août 2004 - 17:14
Bonjour,

J'ai aussi eu le pb avec une base MySQL.
Pour éviter cela, j'ai encadré ma variable de plusieurs guillemets :
"WHERE nom = """ + sNom + """ AND ..."

Normalement ca pause pas de problème

A bientôt
"manu" <enj.manu026@netcourrier.com> a écrit dans le message de
news:4110ac91$1@news.pcsoft.fr...


Bonjour.
J'effectue une requete SQL sur une BD en utilisant la fonction :
HExecuteRequeteSQL(Req,hRequeteDefaut,sReq).

voici le code de la clause WHERE de la chaine sReq définissant la requête
:
sReq = [debut req]+...
" WHERE MaTable.Nom LIKE '%"+sNom+'%"
Ainsi ma requete est paramétrée suivant la chaine sNom

Le problème est que la chaine sNom peut contenir des apostrophes et alors
ma requete n'est plus correcte syntaxiquement.
Y'a-il une solution pour contourner ce problème ?
Je vous remercie par avance de votre aide

cordialement.
manu