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 :

notification de doublon dans un champ texte


Sujet :

Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 64
    Points : 33
    Points
    33
    Par défaut notification de doublon dans un champ texte
    Bonjour,

    Je tente de notifier aux utilisateurs qu'un nom de client (champ texte) qu'ils viennent de saisir existe déjà.

    Pour cela j'ai repris un code trouvé sur le forum mais il m'indique une erreur que je ne sais pas corriger
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Nom_AfterUpdate()
    Dim mbd As Database, DRech As Recordset
     
    Set mbd = CurrentDb()
    Set DRech = mbd.OpenRecordset("Select NomClient From Table_CL Where (NomClient= " & Me.Nom & ")")
     
        If Not DRech.EOF Then
            MsgBox "Ce client existe déjà, merci de vérifier. Saisie annulée."
            Me.Nom = 0
            Me.Nom.SetFocus
        End If
    End Sub
    et l'erreur est la suivante :
    Erreur d'exécution 3061
    Trop peu de paramètres. 1 attendu

    dans le débogage la ligne concernée est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set DRech = mbd.OpenRecordset("Select NomClient From Table_CL Where (NomClient= " & Me.Nom & ")")
    Qu'est-ce qui est oublié ?

    Merci

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 96
    Points : 78
    Points
    78
    Par défaut
    Bonjour,

    essaye de remplacer ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set DRech = mbd.OpenRecordset("Select NomClient From Table_CL Where (NomClient= " & Me.Nom & ")")
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set DRech = mbd.OpenRecordset("Select NomClient From Table_CL Where (NomClient= '" & Me.Nom & "')")

  3. #3
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Pour éviter les doublons, index les champs de la table sans doublon tout simplement.

    Et se baser uniquement sur le nom c'est moyen. Si tu as pris Paul Dupont, tu vas refuser toutes les commandes des autres Dupont de France ?

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 64
    Points : 33
    Points
    33
    Par défaut
    tu es mon sauveur de ces derniers jours tonio-lille

    merci

  5. #5
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Citation Envoyé par Guizbizet
    tu es mon sauveur de ces derniers jours tonio-lille

    merci

    Mouais, tu risque surtout de faire faillite ! Et puis même le couple nom / prénom n'est pas discriminant.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 96
    Points : 78
    Points
    78
    Par défaut
    Citation:
    Guizbizet a écrit :
    tu es mon sauveur de ces derniers jours tonio-lille

    merci


    Mouais, tu risque surtout de faire faillite ! Et puis même le couple nom / prénom n'est pas discriminant.
    Attention je n'ai fait que corriger une erreur de code, il manquait les quotes étant donné que le nom est alphanumérique. je n'ai pas chercher plus loin à savoir si le nom était la clé d'une table et je ne sais pas ce que tu veux faire de ta requete, mais si ton nom est bien la clé de ta table, je te conseille de suivre le conseil de tofalu.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 64
    Points : 33
    Points
    33
    Par défaut
    Non la clé de ma table est un Id_Client en NuméroAuto.

    Peut on donc modifier le code en ne mettant que un message de notification mais en laissant le choix à l'utilisateur de continuer la saisie ou non ...

    je remets le code intégral
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Nom_AfterUpdate()
    Dim mbd As Database, DRech As Recordset
     
    Set mbd = CurrentDb()
    Set DRech = mbd.OpenRecordset("Select NomClient From Table_CL Where (NomClient= '" & Me.Nom & "')")
     
        If Not DRech.EOF Then
            MsgBox "Ce client existe déjà, merci de vérifier. Saisie annulée."
            Me.Nom = Null
            Me.Nom.SetFocus
        End If
    End Sub
    Est-ce que ça conviendrais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Nom_AfterUpdate()
    Dim mbd As Database, DRech As Recordset
     
    Set mbd = CurrentDb()
    Set DRech = mbd.OpenRecordset("Select NomClient From Table_CL Where (NomClient= '" & Me.Nom & "')")
     
        If Not DRech.EOF Then
            MsgBox "Ce client existe déjà, merci de vérifier"
        End If
    End Sub
    J'attends votre avis ...

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 96
    Points : 78
    Points
    78
    Par défaut
    Je suppose que tu es dans ton formulaire de saisie d'un client.

    Dans ce cas tu peux préciser dans ta msgbox, toute les informations relative a client. puis mettre 'Voulez vous effectivement ajouter ce client'

    Si vbyes on continue
    Si vbno tu arrete

    U n truc dans ce style

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 64
    Points : 33
    Points
    33
    Par défaut
    ok je suis partant pour ça par contre je ne sais pas faire du tout ... alors je veux bien de l'aide

  10. #10
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Regarde dans l'aide ce que retourne la fonction Msgbox

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 64
    Points : 33
    Points
    33
    Par défaut
    Bonjour,

    Bon j'ai trouvé 2 / 3 trucs mais c'est pas encore ça

    Voilà ou j'en suis :
    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
    Private Sub Nom_AfterUpdate()
    Dim mbd As Database, DRech As Recordset
     
    Set mbd = CurrentDb()
    Set DRech = mbd.OpenRecordset("Select NomClient From Table_CL Where (NomClient= '" & Me.Nom & "')")
     
        If Not DRech.EOF Then
            MsgBox "Ce client existe déjà, merci de vérifier via la recherche ci-dessus." & vbCrLf & vbCrLf & _
            "Voulez-vous continuer la saisie de ce client ?", vbOKCancel
     
            If vbCancel Then DoCmd.CancelEvent
            End If
     
        End If
    End Sub
    1er problème quand je teste il me dit :
    End If sans bloc If
    sur le tout dernier End If

    Ce que je souhaite :
    Si oui on continue
    Si cancel on supprime la saisie et on ne sauve pas l'enregistrement
    Et là je sèche complètement

    merci de voter aide

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 96
    Points : 78
    Points
    78
    Par défaut
    Bonjour

    1er problème quand je teste il me dit :
    Citation:
    End If sans bloc If
    sur le tout dernier End If
    Pour ça je ne uis pas sur mais mets ton docmd à la ligne et il n'y a pas de raison que ça marche pas (ou enlève le premier end if)

    Si oui on continue
    , donc on ne fait rien on continue

    Si cancel on supprime la saisie et on ne sauve pas l'enregistrement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.Close , , acSaveNo
    qui remplace ton docmd_cancelevent

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 64
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par tonio-lille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.Close , , acSaveNo
    qui remplace ton docmd_cancelevent
    OK ça marche bien mais si je ne veux pas fermer le formulaire, quel commande dois-je placer ?

  14. #14
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    je sais bien que cela n'a rien à voir avec le problème posé mais dans mon fichier clients j'ai plus de 70 occurences où le nombre de doublons sur
    nom/prénom est supérieur à 20

    et encore je travaille en France, je n'ose imaginer le nombre de doublons sur de tels critères dans les pays comme la Chine où le nombre de patronymes est très réduit
    Elle est pas belle la vie ?

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 96
    Points : 78
    Points
    78
    Par défaut
    ça devrait faire l'affaire, il y un passage dans la FAQ là dessus

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 64
    Points : 33
    Points
    33
    Par défaut
    Ok pour Me.undo mais j'ai quand même un souci

    Voici le code complet de la fonction :
    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
    Private Sub Nom_AfterUpdate()
    Dim mbd As Database, DRech As Recordset
     
    Set mbd = CurrentDb()
    Set DRech = mbd.OpenRecordset("Select NomClient From Table_CL Where (NomClient= '" & Me.Nom & "')")
     
        If Not DRech.EOF Then
            MsgBox "Ce client existe déjà, merci de vérifier via la recherche ci-dessus." & vbCrLf & vbCrLf & _
            "Voulez-vous continuer la saisie de ce client ?", vbYesNo
     
            If vbNo Then
            Me.Undo
            End If
     
        End If
    End Sub
    Le résultat est quoi que je clique : Oui ou Non l'action Me.Undo s'exécute !!!

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 64
    Points : 33
    Points
    33
    Par défaut
    bon je viens de trouver la solution

    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
    Private Sub Nom_AfterUpdate()
    Dim mbd As Database, DRech As Recordset
     
    Set mbd = CurrentDb()
    Set DRech = mbd.OpenRecordset("Select NomClient From Table_CL Where (NomClient= '" & Me.Nom & "')")
     
        If Not DRech.EOF Then
        Dim intReponse As Integer
            intReponse = MsgBox("Ce client existe déjà, merci de vérifier via la recherche ci-dessus." & vbCrLf & vbCrLf & _
            "Voulez-vous continuer la saisie de ce client ?", vbYesNo)
     
            If intReponse = vbNo Then
            Me.Undo
            End If
     
        End If
    End Sub
    Merci de votre aide tous

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

Discussions similaires

  1. [SQLite]éliminer un motif dans des champ TEXT
    Par Invité(e) dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/05/2005, 17h44
  2. Réponses: 9
    Dernier message: 23/05/2005, 09h35
  3. Une valeur ne s'affiche pas dans un champ texte
    Par KibitO dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 13/03/2005, 20h42
  4. [FLASH MX] Variable URL dans un champ texte
    Par furet92 dans le forum Flash
    Réponses: 4
    Dernier message: 07/02/2005, 14h26
  5. recherche de doublons dans un fichier texte
    Par portu dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 07/10/2003, 14h13

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