Comment échapper les (') dans une requête sous ACCESS

Résolu/Fermé
yfchauer
Messages postés
78
Date d'inscription
mardi 11 décembre 2007
Statut
Membre
Dernière intervention
18 janvier 2014
- 2 avril 2013 à 20:36
yfchauer
Messages postés
78
Date d'inscription
mardi 11 décembre 2007
Statut
Membre
Dernière intervention
18 janvier 2014
- 6 avril 2013 à 19:02
Bonsoir à tous
J'ai réalisé un formulaire de recherche à critères multiple

[code]

SQL = "SELECT MediaID, TitreMedia, Rangement, LibelleGenre, LibelleSupportMedia, (PrenomAuteur +' '+ NomAuteur) AS Nom_Auteur, " _
& "NomEditeur " _
& "FROM T_Medias, T_Genres, T_SupportMedia, T_Auteurs, T_Editeurs " _
& "WHERE T_Medias!CodeGenre = T_Genres!GenreID AND T_Medias!CodeSupport = T_SupportMedia!SupportID " _
& "AND T_Medias!CodeAuteur = T_Auteurs!AuteurID And T_Medias!CodeEditeur = T_Editeurs!NumEditeur " _
& "AND T_Medias!MediaID <> 0 "

If Not Me.ChkAuteur Then
SQL = SQL & "AND T_Auteurs![PrenomAuteur] + + [NomAuteur] LIKE '*" & Me.TxtAuteur & "*'"
End If

If Not Me.ChkEditeur Then
SQL = SQL & "AND T_Editeurs!NomEditeur LIKE '*" & Me.TxtEditeur & "*'"
End If

If Not Me.ChkGenre Then
SQL = SQL & "AND T_Genres!LibelleGenre = '" & Me.CboGenre & "'"
End If

If Not Me.ChkSupport Then
SQL = SQL & "AND T_SupportMedia!LibelleSupportMedia = '" & Me.CboSupport & "'"
End If

If Not Me.ChkTitre Then
SQL = SQL & "AND T_Medias!TitreMedia LIKE '*" & Me.TxtTitre & "*'"
End If


SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))

SQL = SQL & ";"

/code

La requête fonctionne normalement
Mais, j'ai un message d'erreur (Cf. copie d'écran) dans l'un des champs de recherche contient (') comme dans O'NEIL, etc...
Et donc, je souhaite savoir comment régler le souci de ces erreurs ?

J'ai vu dans un forum php/mysql que l'on peut créer une fonction pour échapper les (')
Est ce possible sous access?
Merci d'avance pour votre aide

4 réponses

Bonjour

Pour échapper les apostrophes, il suffit de les doubler. Je me suis écrit la fonction suivante (il y a sans doute mieux) avec laquelle je n'ai jamais eu de problème :

' double les apostrophes pour pouvoir passer des chaines aux requêtes SQL 
' ceci suppose qu'on passe les chaînes aux requêtes entre apostrophes... 

Function ChaineBD(ByVal src As String) As String 
  Dim k%, resultat$, r% 
   
  k = 1 
  resultat = "" 
  Do 
    r = InStr(k, src, "'") 
    If r = 0 Then 
      ChaineBD = resultat & Mid$(src, k) ' on n'a rien trouvé, on ajoute la fin de la chaîne 
      Exit Function 
    End If 
    resultat = resultat & Mid$(src, k, r - k + 1) & "'" 
    k = r + 1 
  Loop 
   
End Function
0
yfchauer
Messages postés
78
Date d'inscription
mardi 11 décembre 2007
Statut
Membre
Dernière intervention
18 janvier 2014
2
6 avril 2013 à 01:46
Bonsoir le père

Merci de la fonction,
Mais comment je peux l'intégrer dans mon code?

0
Utilisateur anonyme
6 avril 2013 à 11:16
Tu mets la fonction dans un module.

Ensuite, tu peux ré-écrire ta requête et utilisant la fonction sur toutes les valeurs de type texte. Elle inclut les apostrophes, ce qui t'évite d'ajouter des & "'" partout :
Je ne te montre qu'un exemple :
SQL = SQL & "AND T_Editeurs!NomEditeur LIKE '*" & Me.TxtEditeur & "*'" 

devient
SQL = SQL & "AND T_Editeurs!NomEditeur LIKE " & ChaineBD("*" & Me.TxtEditeur & "*")

ou

Au fait, tu es sûr de ctte ligne là avec ses deux + qui se suivent :
SQL = SQL & "AND T_Auteurs![PrenomAuteur] + + [NomAuteur] LIKE '*" & Me.TxtAuteur & "*'" 
0
yfchauer
Messages postés
78
Date d'inscription
mardi 11 décembre 2007
Statut
Membre
Dernière intervention
18 janvier 2014
2
6 avril 2013 à 19:02
Bonsoir,
J'ai un message d'erreur
"Erreur de compilation : Variable ou procédure attendue, et non un module"
lorsque j'intègre la fonction dans le code.

Quant à la question
[...]
Au fait, tu es sûr de cette ligne là avec ses deux + qui se suivent :

SQL = SQL & "AND T_Auteurs![PrenomAuteur] + + [NomAuteur] LIKE '*" & Me.TxtAuteur & "*'" 

[...]

Oui, la concaténation fonctionne
0