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 :

Problème apostrophe dans formulaire de recherche


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Février 2013
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 69
    Points : 37
    Points
    37
    Par défaut Problème apostrophe dans formulaire de recherche
    Bonjour tout le monde !!
    Je vous expose rapidement mon soucis: je suis en train de monter une base de données qui contient un formulaire de recherche avec plusieurs critères, inspiré de Caféine, adapté à mon cas, et qui fonctionne bien.

    J'ai donc effectué plusieurs saisies pour tester le fonctionnement de la base, et là ben mon soucis est apparut.
    En effet dans ce formulaire de recherche j'ai des problèmes avec les accents et les apostrophes.

    A la base j'avais un code VBA comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If Me.chkNom Then
        SQL = SQL & "And RQTFORMMULTI!Nom like '" & Me.txtRechNom & "*' "
     End If
     If Me.chkIDCategorie Then
        SQL = SQL & "And RQTFORMMULTI!Categorie like '" & Me.cmbRechIDCategorie & "*' "
     End If
    Je vous ai mis ces deux lignes en exemple, il y en a d'autres mais sur le même principe de sélection donc inutile de tout mettre.

    J'ai résolu le problème des accents (enfin je pense du moins) en enlevant l'astérisque dans la syntaxe du SQL, donc j'ai ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If Me.chkNom Then
        SQL = SQL & "And RQTFORMMULTI!Nom like '" & Me.txtRechNom & "' "
     End If
     If Me.chkIDCategorie Then
        SQL = SQL & "And RQTFORMMULTI!Categorie like '" & Me.cmbRechIDCategorie & "' "
     End If
    Mais j'ai toujours mon problème d'apostrophe que je n'arrive pas à résoudre.
    J'ai lu le tuto de Caféine à cette adresse
    http://cafeine.developpez.com/access...ugprint/#LVI-E

    mais ça ne fonctionne pas.

    En plus dans les explications dans le SQL il y a "=" et moi j'ai le "like" alors peut être c'est pour cela que je n'arrive pas à avoir le résultat voulu.
    Lorsque j'essaie de doubler les quotes en utilisant la fonction Replace comme préconisé j'ai une liste résultat videquand je coche la recherche nom ou autre et aucun effet lorsque je lance une recherche

    Le debug me renvoie sur la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.lblStats.Caption = DCount("*", "RQTFORMMULTI", SQLWhere) & " / " & DCount("*", "RQTFORMMULTI")
    Voilà alors si quelqu'un sait comment je doit écrire la syntaxe de mon SQL pour arriver à sélectionner des mots avec apostrophes, y doit pas manquer grand chose mais j'y arrive pas :-(
    Sinon j'ai toujours l'option de pas mettre d'apostrophe vous me direz mais comme cette base va être utilisée par plusieurs personnes c'est pas terrible la solution par défaut, je préfère d'abord demander si quelqu'un veut bien m'aider.

  2. #2
    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 apostrophe
    vete25,

    J'ai résolu le problème de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If Me.chkNom Then
        SQL = SQL & "And RQTFORMMULTI!Nom like " & chr(34) & Me.txtRechNom & chr(34) & " "
     End If
     If Me.chkIDCategorie Then
        SQL = SQL & "And RQTFORMMULTI!Categorie like " & chr(34) & Me.cmbRechIDCategorie & chr(34) & " "
     End If
    Je transforme l'apostrophe par le double quote (peu de chances de l'avoir dans un nom ou un champ).

    Du coup tu dois pouvoir remettre tes * après le nom pour chercher sur une partie de ton champ

    Peut être existe une solution plus professionnelle, mais en attendant l'avis d'un expert cette solution ne m'a jamais posée de problèmes.

    Bonne soirée

    JimboLion

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Février 2013
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 69
    Points : 37
    Points
    37
    Par défaut
    Merci jimbolion, j'ai pas de message erreur mais ça fait un fonctionnement bizarre et pas forcément plus pratique à l'usage

    Normalement mon formulaire fonctionne de cette façon: à l'ouverture le compteur m'affiche le nb total de saisie, ensuite lorsque je coche la case nom par exemple ce compteur ne change pas tant que je n'ai pas fait une recherche, et il se met à jour avec l'affichage de la liste des résultats correspondants dès que je fait une recherche et ce qui était vachement confortable c'est que je pouvait entrer le nb de lettre que je voulais et pas besoin d'astérisque et j'appuyais sur la touche envoi et hop la liste à jour.

    Là voilà ce qu'il se passe: à l'ouverture j'ai bien le compteur de mes saisies (par exemple 300/300), dès que je coche la case "nom" avant de faire la moindre recherche et bien la liste résultat se vide (j'ai 0/300), et lorsque je saisie une recherche:
    si saisie= la/les premières lettres sans astérisque --> aucun résultat
    si saisie= la/les premières lettres avec astérisque --> résultat ok
    si saisie= mot exact --> résultat ok

    L'apostrophe étant très bien pris en compte lorsque j'obtiens un résultat.

    Est ce que je peux te demander à quoi correspond Chr(34) à quoi ça sert?

    Par contre sur les listes déroulantes je n'ai pas le problème de vidage de la liste (mais je ne saisie rien je sélectionne dans une liste alors forcément) quand je coche la case pour activer la recherche, peut être parce que la recherche par Nom est un champ texte ? c'est le seul, c'est bien ma veine ça.

    A la base je voudrais juste que mon champ recherche txtNom accepte les apostrophes lors d'une recherche mais j'aimerai conserver le système sans astérisque je le trouve plus souple
    Par exemple si j'ai une personne qui s'appelle "n'guyen", si je tape " n' " et que j'envoie , il me sort tous les gens qui commence par " n' "
    C'est ce qu'il se passait jusqu'à présent, et tant qu'il n'y a pas d'apostrophe ça marche nickel

    Donc pour résumer ce qui me gêne dans la solution que tu m'a proposé c'est que d'une part je suis obligé de mettre une astérisque si le mot n'est pas entier, et d'autre part la liste résultat qui se vide quand je coche ma case Nom je trouve pas ça logique.

  4. #4
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonsoir,

    SQL accepte le guillemet simple ou le guillemet double, comme délimiteur de texte.
    Il est recommandé de doubler le délimiteur si on risque de le rencontrer.
    Doubler le délimiteur ne génère pas d'erreur SQL.

    Si on utilise le guillemet simple ('):
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
        SQL = SQL & "And RQTFORMMULTI!Nom like '" & Replace(Me.txtRechNom, "'", "''") & "' "
    Si on utilise le guillemet double ("):
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
        SQL = SQL & "And RQTFORMMULTI!Nom like """ & Replace(Me.txtRechNom, """", """""") & """ "
    Si on utilise le guillemet double (") sous la forme Chr(34):
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
        SQL = SQL & "And RQTFORMMULTI!Nom like " & Chr(34) & Replace(Me.txtRechNom, Chr(34), Chr(34) & Chr(34)) & Chr(34) & " "

    Les trois formes ci-dessus sont équivalentes.

    Si le fait de doubler le caractère délimiteur de texte ne solutionne pas ton problème, ça veut peut-être dire qu'il y en a un autre.
    Pour vérifier la validité du sql généré par ton code, essaie la méthode décrite dans http://cafeine..../debugprint/#LV.

    A+

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Février 2013
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 69
    Points : 37
    Points
    37
    Par défaut
    Merci à tous les deux, j'ai fini par y arriver.
    Tu m'as mise sur la voie LedZeppII, c'était un autre problème qui bloquait le bon fonctionnement du Replace, un Null qui trainait dans le reste du code, et effectivement en relisant le tuto de Caféine je suis arrivée à me dépatouiller.

    En plus du coup j'ai remis l'astérisque dans le code, comme ça pas besoin de le mettre dans la recherche, j'envoie et c'est bon
    Je remet le code final ça peut servir à d'autres, moi je galère tellement avec tout ce qu'il y à apprendre et retenir dans les syntaxes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = SQL & "And RQTFORMMULTI!Nom like '" & Replace(Me.txtRechNom, "'", "''") & "*' "
    Merci de votre aide, bonne soirée.

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

Discussions similaires

  1. [AC-2010] Problème apostrophe dans un formulaire
    Par redojackson dans le forum VBA Access
    Réponses: 6
    Dernier message: 26/05/2013, 15h23
  2. Problème dans formulaire de recherche
    Par pat17 dans le forum IHM
    Réponses: 9
    Dernier message: 05/12/2011, 16h20
  3. Problème dans formulaire de recherche
    Par pat17 dans le forum IHM
    Réponses: 2
    Dernier message: 30/11/2011, 12h04
  4. [AC-2000] Problème SQL dans formulaire recherche
    Par Ckikikirame dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 17/05/2009, 17h30
  5. [XSL] Problème apostrophe dans paramètre
    Par jeyce dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 28/03/2006, 18h46

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