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

Requêtes et SQL. Discussion :

Problème de syntaxe? [AC-2016]


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 28
    Points : 19
    Points
    19
    Par défaut Problème de syntaxe?
    Bonjour,

    j'essaie d'effectuer cette requête afin de vérifier si le nom entré existe déjà dans la base de données avec le code suivant (qui ne fonctionne pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Requete = "SELECT Count(t_Grenadiers.Numéro) AS Compte FROM t_Grenadiers WHERE (((t_Grenadiers.Nom)=" & Selection_Nom & "));"
    test = CurrentDb.OpenRecordset(Requete).Fields(0).Value
    Par contre si j'utilise le code suivant cela fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Function SetSelectionNom()
    SetSelectionNom = Selection_Nom
    End Function
     
    Requete = "SELECT Count(t_Grenadiers.Numéro) AS Compte FROM t_Grenadiers WHERE (((t_Grenadiers.Nom)=SetSelectionNom()));"
    test = CurrentDb.OpenRecordset(Requete).Fields(0).Value
    Pouvez-vous me dire où se trouve mon erreur?

    Merci

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 759
    Points : 14 793
    Points
    14 793
    Par défaut
    bonsoir,
    peut-être à cause des double-quotes manquantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Requete = "SELECT Count(t_Grenadiers.Numéro) AS Compte FROM t_Grenadiers WHERE (((t_Grenadiers.Nom)=""" & Selection_Nom & """));"
    test = CurrentDb.OpenRecordset(Requete).Fields(0).Value
    Dcount fonctionne aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    test = Dcount("[Numéro]","[t_Grenadiers]","[Nom]=""" & Selection_Nom & """")
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  3. #3
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 629
    Points : 34 334
    Points
    34 334
    Par défaut
    Hello,

    la solution de tee_grandbois repond parfaitement, je la complete en t'indiquant que tu peux egalement utiliser comme caractere de champ texte les apostrophes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Requete = "SELECT Count(t_Grenadiers.Numéro) AS Compte FROM t_Grenadiers WHERE (((t_Grenadiers.Nom)='" & Selection_Nom & "'));"
    L'avantage est de ne plus avoir a compter le nombre de guillemets, l'inconvenient est que si ton texte contient des apostrophes, il faudra les doubler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Requete = "SELECT Count(t_Grenadiers.Numéro) AS Compte FROM t_Grenadiers WHERE (((t_Grenadiers.Nom)='" & Replace(Selection_Nom,"'","''") & "'));"
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 759
    Points : 14 793
    Points
    14 793
    Par défaut
    Bonjour Jean-Philippe,
    autre solution utiliser la fonction Chr(34) qui renvoie une double apostrophe : cela a plus de caractère, mais çà fait aussi plus de caractères
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Requete = "SELECT Count(t_Grenadiers.Numéro) AS Compte FROM t_Grenadiers WHERE (((t_Grenadiers.Nom)=" & Chr(34) & Selection_Nom & Chr(34) & "));"
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 345
    Points : 23 805
    Points
    23 805
    Par défaut
    Bonjour à vous.

    À propos de l'apostrophe (') comme délimiteur de champ texte, prendre garde à ce que les données n'en contiennent pas ou alors les doubler sinon cela va planter le SQL.
    On devrait faire la même chose avec le guillemet (") mais il est plus rare d'en avoir dans un texte.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    Bonjour,
    un tout grand merci à vous tous.... Pour le moment, j'ai retenu la solution avec les ', mais je suis aussi séduit par chr$(34)....
    Où pourrais-je trouver une doc concernant ces différentes syntaxes?

    Merci encore... On peut perte parfois beaucoup de temps avec ce genre de problèmes surtout quand on débute...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Requete = "SELECT Count(*) AS Compte FROM t_Marcheurs WHERE" & _
    "((([t_Marcheurs.Nom])='" & Selection_Nom & "' AND ([t_Marcheurs.Prénom])='" & Selection_Prenom & "'));"

  7. #7
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 629
    Points : 34 334
    Points
    34 334
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    Bonjour,
    je viens de regarder rapidement le tuto sur les requêtes, mais je n'ai rien vu concernant la syntaxe ( ', """, ...)
    Existe-t-il une doc sur ce sujet?
    Merci

  9. #9
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 759
    Points : 14 793
    Points
    14 793
    Par défaut
    Bonjour,
    il n'y a pas de documentation concernant la syntaxe d'utilisation de l'apostrophe, C'est juste qu'il faut faire attention que l'on manipule des données contenant des caractères réservés (",*, & , /, =, + ...) ou que l'on nomme des objets avec des mots réservés : on ne devrait pas nommer une table TABLE ou un champ SELECT mais Access le permet car il met d'office les crochets quand on est dans l'interface graphique.
    Certes, c'est pratique, surtout pour ceux qui persistent à utiliser ces mots réservés mais Access ne met pas les crochets dans les autres environnements (VBA ou en mode SQL).

    Pour en revenir aux caractères ' ou ", ils sont d'utilisation relativement courante dans la langue française (dans le nom de personnes ou dans les adresses) et cela pose forcement des problèmes lorsque l'on doit construire une requête, car malgré l'utilisation de Chr() si ce caractère se trouve dans la chaîne construite cela va produire une erreur.
    Un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Requete = "SELECT Count(*) FROM t_Marcheurs WHERE [Nom]='" & Selection_Nom & "' AND [Prénom]='" & Selection_Prenom & "';"
    avec nom D'Harcourt et prénom Jean, Requete aura comme valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     "SELECT Count(*) FROM t_Marcheurs WHERE [Nom]='D'Harcourt' AND [Prénom]='Jean';"
    cela aura pour conséquence de provoquer une erreur de syntaxe.
    Le seul moyen sera de supprimer le caractère à la fois dans le critère et dans le champ de la sélection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     "SELECT Count(*) FROM t_Marcheurs WHERE Replace([Nom],Chr(39),"")='" & Replace([Selection_Nom],Chr(39),"") & "' AND [Prénom]='" & Selection_Prenom & "';"
    Remarque :Chr(39) est le code numérique pour l'apostrophe. Et le résultat sera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     "SELECT Count(*) FROM t_Marcheurs WHERE Replace([Nom],Chr(39),"")='DHarcourt' AND [Prénom]='Jean';"
    Ce genre de problème ne se résout pas en consultant la documentation en ligne mais uniquement avec l'expérience ou en parcourant les forums.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    ... Avec beaucoup de retard, merci pour ces infos, je vais regarder cela de plus près....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de syntaxe - elements['x'].value
    Par Equus dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/02/2005, 11h22
  2. [Interbase] Problème de syntaxe SQL
    Par navis84 dans le forum InterBase
    Réponses: 4
    Dernier message: 22/12/2004, 17h07
  3. Problème de syntaxe
    Par Mister_FX dans le forum ASP
    Réponses: 5
    Dernier message: 30/06/2004, 10h01
  4. Problème de syntaxe ADO ...
    Par bendev dans le forum ASP
    Réponses: 2
    Dernier message: 15/04/2004, 14h38
  5. Réponses: 2
    Dernier message: 08/03/2004, 15h10

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