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

Access Discussion :

Pb apostrophes et replace access2000


Sujet :

Access

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 124
    Points : 65
    Points
    65
    Par défaut Pb apostrophes et replace access2000
    Bonjour à tous,

    J'ai un formulaire avec une liste déroulante basée sur ID Cépages (listes des cépages) afin de rechercher l'enregistrement correspondants. Ce chmaps contient des apostrophes , j'ai donc appliqué ce code sur AprèsMiseAjour :

    Private Sub Modifiable4_AfterUpdate()
    ' Rechercher l'enregistrement correspondant au contrôle.
    Dim rs As Object

    Set rs = Me.Recordset.Clone
    rs.FindFirst "[ID cépage]= '" & Replace(Me![Modifiable4], "'", "''") & "'"
    Me.Bookmark = rs.Bookmark
    End Sub

    En sélectionnant un nom sans apostrophe cela marche, mais s'il ya une apostrophes la recherche de l'enregistrement correspondant n'est pas effectuée. Après quelques de recherche, je me suis aperçu que le fait que le champ soit sous clé primaire ou indéxé, était lié. En effet si je défini le champ ID Cépages comme non indexé : tout marche bien.
    Le problème, c'est que j'ai besoin d'indexer ce champ pour éviter les doublons!!!
    Comment faire?
    Merci d'avance pour votre aide car cela fait longtemps que je suis sur ce pb

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Un clé primaire ne doit pas contenir ce genre d'information...
    Je te conseille très fortement de créer une clé primaire numérique ou avec un compteur, sinon, tu vas tout droit dans des galères comme celle que tu as posté !
    Si tu veux indexer ce champ, aucun problème, tu créés la clé compteur associée à ton IDCepage. Dans la table, tu sélectionnes les 2 champs et tu cliques sur la tite clé !


    Argy

  3. #3
    Membre expérimenté
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Points : 1 709
    Points
    1 709
    Par défaut
    1- l'engueulade : utilises les balises de code, s.t.p. Dans ton cas, c'est flagrant : qu'est-ce que tu remplaces par quoi : 2 quotes par 3 quotes ? ou un double quote par un simple ? C'est pas clair.

    Ensuite, ta méthode est bonne mais tu peux faire un peu plus simple :
    - si tu recherches sur le Recordset au lieu du Clone, tu n'as pas besoin de copier les bookmarks, (OK, ça ne résoud pas le problème)
    - as tu essayé la commande Docmd.Findrecord, sur le formulaire ? Est-ce que ça donne la même chose ?
    - qu'est-ce qu'il se passe si tu n'utilises pas de Replace() ?

    P.S. rien à voir non plus, mais je ne peux pas m'empêcher : merci de déclarer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim rs as DAO.Recordset
    pas 'As Object' !
    Tu y gagneras la liste des méthodes en tapant le point.

    Sinon, j'ai eu des cas similaires, et la solution a été
    - d'avoir un champ indexé (clé primaire, en l'occurence) invisible, en + du champ visible (non indexé),
    - à chaque modif du champ visible (_AfterUpdate), 'traduction' du contenu du champ (par exemple : suppression des guillemets ou remplacement par un _underscore_) et enregistrement dans le champ caché,
    - toutes recherches se font sur le champ caché.

    Mais on va peut être trouver + simple ?

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 124
    Points : 65
    Points
    65
    Par défaut
    Bonjour, merci de vos réponses,

    En réponse à papy turbo je suis désolé si j'ai fais des erreurs mais je suis novice (voir un embryon) dans access et je ne comprends pas tout le langage.

    j'ai incorporé ma liste déroulante (Modifiable4) à l'aide de l'assistant. Le problème c'est que j'ai une erreur 3077 à chaque fois que je sélectionne un nom de cépage contenant une apostrophe (Muscat d'alexandrie par exemple).

    Après quelques recherche dans diverses FAQ, la solution apparement est de remplacer les ' par une double'' ce que j'ai fait en intégrant la fonction Replace().
    Mais cela ne marche toujours pas. Je n'ai plus le message d'erreur, mais mon enregistrement n'est pas recherché.(sauf si je retire la clé primaire ou l'indexage de ce champ).

    A la réponse d'Argyronet, J'ai essayé comme tu as dis un autre champ (type N°auto) et de l'associer en clé primaire avec mon champ ID Cépages mais ce dernier n'est pas indexé. IL n'y a pas de risque de doublons?

  5. #5
    Membre expérimenté
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Points : 1 709
    Points
    1 709
    Par défaut
    Je comprends mieux, et la réponse d'Argyronet est la bonne : il te faut un champ clé primaire, avec un NuméroAuto
    J'ai essayé comme tu as dis un autre champ (type N°auto) et de l'associer en clé primaire avec mon champ ID Cépages mais ce dernier n'est pas indexé. IL n'y a pas de risque de doublons?
    Rien ne t'empêche :
    - de masquer le champ [CléPrimaire] dans ta liste (largeur colonne = 0),
    - de lier quand même ce champ à la valeur de la liste (BoundColumn = colonne liée)
    - de faire la recherche sur ce champ, qui est la valeur renvoyée par la liste,
    - d'indexer le champ [NomCepage], qui contient des apostrophes, avec interdiction de doublons. (Index unique mais non primaire)

  6. #6
    Membre expérimenté
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Points : 1 709
    Points
    1 709
    Par défaut
    Je viens de voir le détail de la réponse d'Argyronet, plus haut. J'y aporterais un bémol :
    Si tu veux indexer ce champ, aucun problème, tu créés la clé compteur associée à ton IDCepage. Dans la table, tu sélectionnes les 2 champs et tu cliques sur la tite clé !
    je créerais
    - la clé primaire sur le champ NumeroAuto seul : champ [CleCepage], par exemple
    - un index unique séparé sur le champ [NomCepage], juste pour éviter les doublons.
    Je ne vois pas d'intérêt à ce que la clé primaire contienne les 2 champs, et les performances générales seront meilleures.

  7. #7
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Vi Vi vi, Papy...
    Bon, j'ai écris un peu vite

  8. #8
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 124
    Points : 65
    Points
    65
    Par défaut
    merci

    C'est ce que je pensais faire de toute façon (Clé sur un numéro Auto). mais c'est quand même bizarre que le doublage des apostrophes sur un champ indéxé-sans doublon ne marche.

    Merci pour tout et bonne fin de journée

  9. #9
    Membre expérimenté
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Points : 1 709
    Points
    1 709
    Par défaut
    hé, pssst ! et le tag résolu !!!!!

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

Discussions similaires

  1. Replace et apostrophe
    Par Anox31 dans le forum Développement
    Réponses: 4
    Dernier message: 11/11/2009, 17h05
  2. replace apostrophe probleme
    Par le_fif dans le forum Langage
    Réponses: 5
    Dernier message: 18/08/2009, 21h49
  3. String.Replace protéger apostrophe
    Par PoZZyX dans le forum C#
    Réponses: 2
    Dernier message: 18/05/2009, 13h50
  4. [2.0] Fonction Replace avec apostrophe
    Par quanou dans le forum ASP.NET
    Réponses: 7
    Dernier message: 21/08/2008, 11h27
  5. problème SQL apostrophe et replace()
    Par Muffyn dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 04/09/2006, 14h30

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