IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Requete SQL sous VBA dont les nom contiennent des quotes simples ( ' )


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 35
    Points : 20
    Points
    20
    Par défaut Requete SQL sous VBA dont les nom contiennent des quotes simples ( ' )
    Bonjour tout le monde,

    Je suis face à un problème que je n'arrive pas à résoudre : j'essaye d'envoyer une requete à acces via VBA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    re.Open "SELECT Jouets.Id, Jouets.Designation, Jouets.Delai_assemblage FROM Jouets WHERE (((Jouets.Designation)='" & Sheets("Feuil3").Cells(ComboBoxJouets.ListIndex + 1, 2) & "') AND ((Jouets.Delai_assemblage)= " & Sheets("Feuil3").Cells(ComboBoxJouets.ListIndex + 1, 3) & "));", bds
    "Sheets("Feuil3").Cells(ComboBoxJouets.ListIndex + 1, 3)" comprend une colonne contenant des chiffres donc pas de problème de ce coté là;
    c'est "Sheets("Feuil3").Cells(ComboBoxJouets.ListIndex + 1, 2)" qui comprend des noms dont certains possède une quote simple (Ex :"robot de 10cm d'envergure")

    Du coup quand j'execute le code Acces recoit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    re.Open "SELECT Jouets.Id, Jouets.Designation, Jouets.Delai_assemblage FROM Jouets WHERE (((Jouets.Designation)='robot de 10cm d'envergure') AND ((Jouets.Delai_assemblage)= " 25 "));", bds
    . Et cela plante à cause de l'apostrophe que contient le nom.

    Y aurait il un moyen de contourner le problème car l'utilisateur doit avoir la possibilité de mettre des noms contenants des quotes simples.

    Bonne journée.

  2. #2
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 871
    Points : 3 451
    Points
    3 451
    Par défaut
    Bonjour Buleur,

    Si tu remplaces
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE (((Jouets.Designation)='" & Sheets("Feuil3").Cells(ComboBoxJouets.ListIndex + 1, 2) & "')
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE (((Jouets.Designation)=" & Chr(34) & Sheets("Feuil3").Cells(ComboBoxJouets.ListIndex + 1, 2) & Chr(34) & ")
    ça devrait fonctionner.

    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 35
    Points : 20
    Points
    20
    Par défaut
    VBA m'envois : [Microsoft][Pilote ODBC Microsoft Access] trop peu de paramètres. 1 attendu.

  4. #4
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 871
    Points : 3 451
    Points
    3 451
    Par défaut
    Bonjour Buleur,

    Qu'est-ce que ça donne si tu fais un Debug.Print pour le SQL? Le chr(34) remplace l'apostrophe donc tu devrais voir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE (((Jouets.Designation)="robot de 10cm d'envergure")
    Ce qui théoriquement devrait fonctionner.

    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  5. #5
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Buleur bonjour,
    Robert

    ou créer une fonction gérant les quotes ou double quotes :

    ainsi cette fonction à mettre dans un module :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function FixQuote(FQText As String) As String
    On Error GoTo Err_FixQuote
    FixQuote = Replace(FQText, "'", "''")
    FixQuote = Replace(FixQuote, """", """""")
    Exit_FixQuote:
    Exit Function
    Err_FixQuote:
    MsgBox Err.Description, , "Erreur dans la  Function Fix_Quotes.FixQuote"
    Resume Exit_FixQuote
    Resume 0 '
    End Function

    tu peux l'utiliser ensuite dans ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    NewData = FixQuote(NewData)
    CurrentDb.Execute "INSERT INTO supplier_tbl ([Description]) VALUES ('" & NewData & "');"
    ou directement dans tes requêtes :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE (((Jouets.Designation)='" & FixQuote(Sheets("Feuil3").Cells(ComboBoxJouets.ListIndex + 1, 2)) & "').....

    A toi de choisir si la méthode Robert te semble la plus simple ou la mienne (gérant double et simple quotes)

    Cordialement

    Jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

Discussions similaires

  1. Requete SQL sous VBA
    Par titeZ dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 05/08/2007, 10h05
  2. Réponses: 3
    Dernier message: 02/08/2007, 23h41
  3. requete SQL sous Access concernant les tranches
    Par Hamadokh dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 03/01/2007, 15h23
  4. Requete SQL sous VBA
    Par Sam 069 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 27/07/2006, 11h04
  5. Format dans Requete SQL sous VBA
    Par Sam 069 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 18/07/2006, 12h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo