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 :

Moteur de recherche et apostrophe


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 23
    Points : 16
    Points
    16
    Par défaut Moteur de recherche et apostrophe
    Bonjour, j'ai un petit soucis et j'espère vivement quelqu'un pourra m'aider à le résoudre. J'ai fais une application qui fait le lien entre une table d'entré de données en liste (les plaintes) et le rôle d'évaluation d'une municipalité de façon externe (recherche d'adresse). Le rôle d'évaluation je ne peut pas le modifier puisque je fais souvent des mise à jour. Le problème est que le moteur de recherche d'adresse (basé sur le tutorial de Caféine) qui pointe sur le rôle d'évaluation n'accepte pas la recherche de terme avec apostrophe du genre ...EGLISE RUE DE L'....cela crée le code d'erreur de l'image 1. Access me propose de déboguer la ligne de l'image 2. Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Option Compare Database
     
    Private Sub chkcivique_Click()
    If Me.chkcivique Then
       Me.cmbRechcivique.Visible = False
    Else
       Me.cmbRechcivique.Visible = True
    End If
     
    RefreshQuery
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub chkpublique_Click()
    If Me.chkpublique Then
       Me.cmbRechpublique.Visible = False
    Else
       Me.cmbRechpublique.Visible = True
    End If
     
    RefreshQuery
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub cmbRechcivique_BeforeUpdate(Cancel As Integer)
     
    RefreshQuery
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub cmbRechpublique_BeforeUpdate(Cancel As Integer)
     
    RefreshQuery
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Private Sub Form_Load()
     
    Dim ctl As Control
     
    For Each ctl In Me.Controls
        Select Case Left(ctl.Name, 3)
            Case "chk"
                ctl.Value = -1
     
            Case "lbl"
                ctl.Caption = "- * - * -"
     
            Case "txt"
                ctl.Visible = False
                ctl.Value = ""
     
            Case "cmb"
                ctl.Visible = False
     
        End Select
    Next ctl
     
    Me.lstResults.RowSource = "SELECT OBJECTID, NO_IMM_INF, F72_VP FROM res_rol6;"
    Me.lstResults.Requery
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Private Sub RefreshQuery()
    Dim SQL As String
    Dim SQLWhere As String
     
    SQL = "SELECT OBJECTID, NO_IMM_INF, F72_VP FROM res_rol6 Where res_rol6!OBJECTID<> 0 "
     
     
    If Not Me.chkcivique Then
      SQL = SQL & "And res_rol6!NO_IMM_INF Like '*" & Me.cmbRechcivique & "*'"
    End If
     
    If Not Me.chkpublique Then
      SQL = SQL & "And res_rol6!F72_VP = '" & Me.cmbRechpublique & "' "
    End If
     
     
     
     
    SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
     
    SQL = SQL & ";"
     
    Me.lblStats.Caption = DCount("*", "res_rol6", SQLWhere) & " / " & DCount("*", "res_rol6")
    Me.lstResults.RowSource = SQL
    Me.lstResults.Requery
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub lstResults_DblClick(Cancel As Integer)
     
    DoCmd.OpenForm "res_rol_stemelanie", acNormal, , "[OBJECTID] = " & Me.lstResults
     
    End Sub
    Un gros merci d'avance à tous et toutes

    Francis
    Fichiers attachés Fichiers attachés

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Probablement que c'est parce que tu utilises des apostrophes comme délimiteur de texte donc tu as 2 solutions :

    1. Remplacer les délimiteurs de chaîne par des guillemets.
      Généralement, il n'y a pas de " dans les textes recherché donc c'est une solution simple et qui marche la plus-part du temps.
      Cela donne quelque chose comme :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      MonSQL="Select UneTable.* from UneTable where UneTable.UnChamp=""" & TonCritere & """"
      Note que quand on utilise un guillemet dans une chaîne, il faur le doubler d'où le "".
    2. Doubler le l'apostrophe AVANT de la passer au SQL.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      MonSQL="Select UneTable.* from UneTable where UneTable.UnChamp='" & replace(TonCritere, "'", "''")  & "'"
      Attention les caractères en vert sont 2 apostrophes (') et non un guillement (").


    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.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 23
    Points : 16
    Points
    16
    Par défaut Résolution du problème
    Dans le fond j'ai juste eu a changer la ligne suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Not Me.chkpublique Then
      SQL = SQL & "And res_rol6!F72_VP = '" & Me.cmbRechpublique & "' "
    End If
    pour celle ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Not Me.chkpublique Then
      SQL = SQL & "And res_rol6!F72_VP = """ & Me.cmbRechpublique & """ "
    End If
    Tout fonctionne bien, merci beaucoup

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

Discussions similaires

  1. [Info]moteur de recherche full text en environnement j2ee
    Par ddams dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 03/11/2004, 19h39
  2. comment faire ma base de donnée pour un moteur de recherche
    Par HoB dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 04/05/2004, 15h07
  3. Moteur de recherche par date
    Par Prue dans le forum ASP
    Réponses: 17
    Dernier message: 27/08/2003, 16h07
  4. [Technique] Index, comment font les moteurs de recherche ?
    Par bat dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 25/10/2002, 15h41

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