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

IHM Discussion :

Gestion des accents pour détecter les doublons [AC-2013]


Sujet :

IHM

  1. #41
    Membre éclairé Avatar de pyloupylou
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2012
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 438
    Points : 666
    Points
    666
    Par défaut
    Maintenant que tu le dis, oui c'est évident, merci Robi
    ----
    Il ne s'agit pas de chercher à tout savoir mais de savoir où tout chercher

    merci de penser à
    Au fait.... je ne réponds pas, moi non plus, aux mp

  2. #42
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Bonjour,

    Un petit passage entre deux indigestions pour vous dire que ça fonctionne, le code suivant sera donc pratiquement le code final :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Private Sub nomCommercial_BeforeUpdate(Cancel As Integer)
     
    Dim txt_sql As String, txt_erreur As String
    Dim lgNb As Long
    Dim rs As Recordset
     
    txt_sql = "SELECT T_Commerces.idCommerce_PK, T_Commerces.nomCommercial, T_Commerces.codeSiren, T_Commerces.numTiers, T_Commerces.raisonSociale, T_Commerces.numVoirie, T_VOIES.VOI_LIBCOMPFIL " _
    & "FROM T_VOIES RIGHT JOIN T_Commerces ON T_VOIES.ID_VOIE = T_Commerces.adresseC1_FK " _
    & "WHERE sansAccent(Nz(nomCommercial, 0),True)=sansAccent('" & Forms!F_Commerces!nomCommercial & "',true);"
     
    txt_erreur = ""
    Set rs = CurrentDb.OpenRecordset(txt_sql)
    If rs.EOF Then
        lgNb = 0
    Else
        rs.MoveLast
        lgNb = rs.RecordCount
    End If
    If lgNb > 0 Then
        rs.MoveFirst
        txt_erreur = "Risque de doublon détecté." & vbCrLf & "Ce nom commercial est déjà enregistré pour " & lgNb & " commerce(s)." & vbCrLf & _
        "Souhaitez-vous afficher la liste détaillée de ce(s) commerce(s) ?" & vbCrLf & "Cliquez sur Oui pour afficher la liste, sur Non pour confirmer la saisie."
        If MsgBox(txt_erreur, vbYesNo + vbExclamation) = vbNo Then
            Cancel = True
        Else
            DoCmd.OpenForm "F_Doublons"
            Forms!F_Doublons.RecordSource = txt_sql
            Forms!F_Doublons.OrderBy = "[nomCommercial] ASC"
            Forms!F_Doublons.OrderByOn = True
            Exit Sub
        End If
    End If
    rs.Close
    Set rs = Nothing
     
    End Sub
    Il me reste à gérer le fait qu'il n'y ait qu'un seul doublon ou plusieurs et adapter le message.

    Deux dernières questions, quand on modifie un nom commercial par erreur et qu’on le remet tout de suite, cet enregistrement est détecté comme un doublon potentiel.
    Peut-on faire en sorte que si tentative de modification il y a mais rétablissement instantané, ce ne soit pas considéré comme un doublon ?

    Je voudrais aussi faire une détection de doublon sur deux champs d'une table. Ça concerne la facturation pour une année associée à un numéro de titre.
    L'ensemble (année ET numéro de titre) ne doivent pas se répéter, sauf cas particulier. C'est le cas particulier qui pose problème car sinon j'utiliserais l'index sur deux champs dans le mode création de la table mais comme il empêche purement la simplement la création de doublons ça ne va pas.
    Comment spécifier deux champs dans le code ci-dessus ?

    Merci encore et tous mes vœux pour 2015

  3. #43
    Membre éclairé Avatar de pyloupylou
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2012
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 438
    Points : 666
    Points
    666
    Par défaut
    fais attention à une chose,

    dans ton code si tu fais un cancel=true, tu n'enregistres rien du tout, en revanche si tu ouvres le deuxième ecran tu enregistres, c'est ce que tu veux ?
    ----
    Il ne s'agit pas de chercher à tout savoir mais de savoir où tout chercher

    merci de penser à
    Au fait.... je ne réponds pas, moi non plus, aux mp

  4. #44
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Non en effet, c'est une des choses dont je dois m'occuper, pas trop eu le temps ces derniers jours mais ça va être fait !

  5. #45
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    J'ai continué à jouer les apprentis-sorciers et je pense utiliser ceci comme code final. Je suis passé sur l'évènement apresMAJ plutôt que avantMAJ, du coup je ne peux plus utiliser cancel = true mais ce n'est pas grave. J'ai aussi opté pour un message d'avertissement plus minimaliste :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    Private Sub nomCommercial_AfterUpdate()
     
    Dim txt_sql As String, db As String
    Dim lgNb As Long
    Dim rs As Recordset
     
    txt_sql = "SELECT T_Commerces.idCommerce_PK, T_Commerces.nomCommercial, T_Commerces.codeSiren, T_Commerces.numTiers, T_Commerces.raisonSociale, T_Commerces.numVoirie, T_VOIES.VOI_LIBCOMPFIL " _
    & "FROM T_VOIES RIGHT JOIN T_Commerces ON T_VOIES.ID_VOIE = T_Commerces.adresseC1_FK " _
    & "WHERE sansAccent(Nz(nomCommercial, 0),True)=sansAccent('" & Forms!F_Commerces!nomCommercial & "',true);"
     
    Set rs = CurrentDb.OpenRecordset(txt_sql)
     
    If rs.EOF Then
        lgNb = 0
    Else
        rs.MoveLast
        lgNb = rs.RecordCount
    End If
     
    If lgNb > 0 Then
        rs.MoveFirst
        db = IIf(lgNb > 1, "les doublons potentiels", "le doublon potentiel")
        If MsgBox("Ce nom commercial est déjà enregistré " & lgNb & " fois." & vbCrLf & _
        "Souhaitez-vous visualiser " & db & " ?", vbYesNo + vbExclamation) = vbYes Then
            DoCmd.OpenForm "F_Doublons", , , , , , lgNb
            Forms!F_Doublons.RecordSource = txt_sql
            Forms!F_Doublons.OrderBy = "[nomCommercial] ASC"
            Forms!F_Doublons.OrderByOn = True
        End If
    End If
     
    rs.Close
    Set rs = Nothing
     
    End Sub
    Je n'ai toujours pas trouvé comment ignorer la modification puis rétablissement du nom commercial qui fait qu'un doublon est détecté, peut-être que ce n'est pas possible.

    Je viens par contre de voir un autre problème, quand il y a une ' dans le nom commercial il y a une erreur de syntaxe. Je pense qu'il faut doubler les ' mais comment faire ça automatiquement ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE sansAccent(Nz(nomCommercial, 0),True)=sansAccent('" & Forms!F_Commerces!nomCommercial & "',true)
    Merci

  6. #46
    Membre éclairé Avatar de pyloupylou
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2012
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 438
    Points : 666
    Points
    666
    Par défaut
    Je viens par contre de voir un autre problème, quand il y a une ' dans le nom commercial il y a une erreur de syntaxe. Je pense qu'il faut doubler les ' mais comment faire ça automatiquement ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE sansAccent(Nz(nomCommercial, 0),True)=sansAccent('" & Forms!F_Commerces!nomCommercial & "',true)
    tu as 2 manières d'indiquer une chaine de caractère, soit le ' comme tu as fait ( mais le problème est justement quand ta rubrique contient le même caractère )
    soit le " mais du coup le problème se décale puisque ce caractère est utilisé dans la construction de l'ordre....

    tu peux contourner le problème avec l'utilisation de la valeur ascii du caractère " soit chr(34) ton ordre devient alors:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE sansAccent(Nz(nomCommercial, 0),True)=sansAccent(" & chr(34) & Forms!F_Commerces!nomCommercial & chr(34) & ",true)
    mais toujours pareil si ta rubrique contient " tu vas encore avoir un souci
    ----
    Il ne s'agit pas de chercher à tout savoir mais de savoir où tout chercher

    merci de penser à
    Au fait.... je ne réponds pas, moi non plus, aux mp

  7. #47
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Merci pyloupylou, ça fonctionne comme ça, en effet le problème est reporté sur les " mais ce n'est pas grave je ferai avec.

  8. #48
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Je considère que le problème est résolu, je n'ai pas réussi à faire tout ce que je voulais mais les accents sont bien gérés et c'était la question initiale.

    Merci pour votre aide Robi et pyloupylou, à bientôt

  9. #49
    Membre régulier
    Homme Profil pro
    Commerçant
    Inscrit en
    Mai 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Commerçant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Mai 2013
    Messages : 61
    Points : 77
    Points
    77
    Par défaut Tout a fait vrai !
    Citation Envoyé par RobiPMS Voir le message
    Bonjour Jipété.
    Ce n'est pas parce que l'on apprécie la langue française dans toute sa richesse, accents compris, qu'il faut ignorer que dans beaucoup de situations, il est nécessaire de traiter les problèmes liés aux accents dans les bases de données. Et c'est au contraire pour les gérer qu'il faut se donner les moyens de rechercher les doublons créés par des oublis d'accents, par exemple... En particulier quand on travaille avec des BDD où de nombreux utilisateurs encodent des données. Et tous n'ont pas le même niveau qualitatif en dactylographie ou en orthographe! Un exemple : comment repérer dans une liste de noms propres les doublons crées par l'encodage de noms qui comportent un ou des accent(s) quand un utilisateur encode le même nom avec accent, et l'autre sans accent?
    Et donc, heureusement qu'il y a dans la FAQ des fonctions qui répondent à ce besoin!
    Cordialement.
    RL
    Tout a fait vrai ! je gère un dictionnaire, et pour des variantes d'orthographe avec une même racine sans accents, il y a des variantes normales, ex: entêtes, entêtés, et les fautes d'orthographes = d'accents ex: entètes, d'où le besoin vital de cette fonction. Les programmeurs se comportent parfois de façon un peu carrée, malgré que tout n'est pas si évident ... pour eux ...

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. Gestion des erreurs : ou trouver les erreurs possibles pour une opération
    Par Godzestla dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 27/10/2008, 14h33
  2. Réponses: 5
    Dernier message: 15/08/2008, 16h08
  3. Gestion des absences pour les taches.
    Par olator dans le forum SharePoint
    Réponses: 4
    Dernier message: 28/12/2007, 09h53
  4. [SQL-SEVER2005] Gestion des erreurs pour les requêtes
    Par eagleleader dans le forum MS SQL Server
    Réponses: 22
    Dernier message: 16/10/2007, 09h59

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