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 :

Gestion des doublons


Sujet :

Access

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2003
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2003
    Messages : 453
    Points : 500
    Points
    500
    Par défaut Gestion des doublons
    Hello

    Dans un formulaire, je vérifie par code si un enregistrement ne fait pas doulon !!

    La détection marche très bien mais le hic vient apres !!

    En effet si l'utilisateur fait echappe tout ce passe comme je veux mais s'il resaisit la valeur qu'il a éffacé il me dédecte un doublon alors que le champ n'existe plus !!

    On m'a parlé de mais j'ai pas réussi a trouvé l'a solution !!

    Voici le code de ma détection de doublon :

    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
     
    Private Sub Titre_Film_BeforeUpdate(Cancel As Integer)
    On Error GoTo Err_Titre_Film_BeforeUpdate
     
        If Not IsNull([Titre Film]) Then
            If FilmExiste([Titre Film]) = True Then
                AfficherErreur "Ce film existe déjà dans la base de données.", "Erreur de saisie"
                DoCmd.CancelEvent
            End If
        End If
     
        Exit Sub
     
    Err_Titre_Film_BeforeUpdate:
        MsgBox Err.Description
        Exit Sub
     
    End Sub
    Quelqu'un aurait un idée ?

    Merci d'avance !!

    @+

    Bestal 666

  2. #2
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    D'après ton code, tu ne testes peut-être pas la dernière valeur saisie, mais la dernière valeur enregistrée...

    En effet, tu effectues ton testes dans BeforeUpdate et il y a peut-être ambiguité entre le contrôle et son champ sous-jacent. Or ce dernier n'est pas encore à jour au moment du test. Donc essaie plutôt de tester la valeur du contrôle et non du champ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        If Not IsNull(Me.Controls("Titre Film")) Then
            If FilmExiste(Me.Controls("Titre Film")) Then
    Par ailleurs, moi je préfère écrire :
    Au lieu de :
    A part ça, montre nous ta fonction FilmExiste, pour qu'on voit mieux d'où vient le pb.
    (\ _ /)
    (='.'=)
    (")-(")

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2003
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2003
    Messages : 453
    Points : 500
    Points
    500
    Par défaut
    Citation Envoyé par FRED.G
    D'après ton code, tu ne testes peut-être pas la dernière valeur saisie, mais la dernière valeur enregistrée...

    En effet, tu effectues ton testes dans BeforeUpdate et il y a peut-être ambiguité entre le contrôle et son champ sous-jacent. Or ce dernier n'est pas encore à jour au moment du test. Donc essaie plutôt de tester la valeur du contrôle et non du champ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        If Not IsNull(Me.Controls("Titre Film")) Then
            If FilmExiste(Me.Controls("Titre Film")) Then
    Par ailleurs, moi je préfère écrire :
    Au lieu de :
    A part ça, montre nous ta fonction FilmExiste, pour qu'on voit mieux d'où vient le pb.
    Merci encore pour la réponse !!!!

    Voici le code de la fonction filmexiste !!

    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
     
    Public Function FilmExiste(strTitreFilm As String) As Boolean
    On Error GoTo Err_FilmExiste
        'Vérifie l'existance d'un film dont le titre est passé en paramètre
        'Renvoie True si le film existe
     
        Set db = CurrentDb()
        Set oQdf = db.QueryDefs("qryFilmExiste")
        oQdf.Parameters("parmTitre").Value = strTitreFilm
        Set rst = oQdf.OpenRecordset()
     
        If rst.RecordCount > 0 Then
            FilmExiste = True
        Else
            FilmExiste = False
        End If
     
        Exit Function
     
    Err_FilmExiste:
        MsgBox Err.Description
        Exit Function
     
    End Function

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2003
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2003
    Messages : 453
    Points : 500
    Points
    500
    Par défaut
    Citation Envoyé par FRED.G
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        If Not IsNull(Me.Controls("Titre Film")) Then
            If FilmExiste(Me.Controls("Titre Film")) Then
    Cela ne fonctionne malheuresment pas
    Mais merci quand même de prendre le temps de tenter de m'aider

    @++

    Bestall666

  5. #5
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    Le problème est un peu pointu. La cause peut provenir de plusieurs endroits.
    Par exemple, on pourrait faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Len(nz(Me.Controls("Titre Film"),vbNullString))>0 Then
    Mais je me doute que le problème n'est pas là. Il semble que la valeur saisie est réellement enregistrée malgré le cancel de l'utilisateur (sinon elle pourrait pas être détectée par ta fonction). Donc faut voir dans quelle mesure, etc.

    A la limite, mets-nous en un extrait du form en pièce jointe, on y jettera un oeil.
    (\ _ /)
    (='.'=)
    (")-(")

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2003
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2003
    Messages : 453
    Points : 500
    Points
    500
    Par défaut
    Citation Envoyé par FRED.G
    Le problème est un peu pointu. La cause peut provenir de plusieurs endroits.
    Par exemple, on pourrait faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Len(nz(Me.Controls("Titre Film"),vbNullString))>0 Then
    Mais je me doute que le problème n'est pas là. Il semble que la valeur saisie est réellement enregistrée malgré le cancel de l'utilisateur (sinon elle pourrait pas être détectée par ta fonction). Donc faut voir dans quelle mesure, etc.

    A la limite, mets-nous en un extrait du form en pièce jointe, on y jettera un oeil.
    Tout d'abord merci beaucoup pour la réponse malgré l'heure tardive !!

    Je me doute bien que c'est un problème assez pointu sinon vous auriez déja trouvé la solution

    En fait je n'ai pas renomé les champs du formulaire ; ils ont donc le même nom que les champs de la table !!! Cela peut-il venir de la ?

    Je joins la base de données compressée !!

    Merci encore pour l'aide

    @+

    Bestall666

  7. #7
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    En effet si l'utilisateur fait echappe tout ce passe comme je veux mais s'il resaisit la valeur qu'il a éffacé il me dédecte un doublon alors que le champ n'existe plus !!
    On s'est mal compris car j'ai saisi un nouvel enregistrement :

    Titre du Film : ET
    --> pas de doublon détecté (normal)

    J'ai fait un Echap, puis j'ai ressaisi : ET
    --> pas de doublon détecté (normal)

    Bref, je ne comprend pas de quoi tu parles. Où est ton problème ?
    (\ _ /)
    (='.'=)
    (")-(")

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2003
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2003
    Messages : 453
    Points : 500
    Points
    500
    Par défaut
    Citation Envoyé par FRED.G
    On s'est mal compris car j'ai saisi un nouvel enregistrement :

    Titre du Film : ET
    --> pas de doublon détecté (normal)

    J'ai fait un Echap, puis j'ai ressaisi : ET
    --> pas de doublon détecté (normal)

    Bref, je ne comprend pas de quoi tu parles. Où est ton problème ?
    On reprend tu saisis un film inexistant (titanic par exemple)

    tu saisis n'importe quel autre champ :normalment tout dois bien ce passer!!

    Tu consultes les autres films pour une raison quelconque (info modif...) mais sans faire express tu effaces le titre : tus dois obtenir un message d'erreur te demandant de saisir un titre . Tu as alors 2 solutions :
    tu fais echap : tout ce passe bien

    tu es un utilisateur lambda qui ne connait pas la touche echap : tu resaisis donc le titre bien sagement : tu as le message "Film exisant" !!

    Voila j'espere que c'est plus clair!!

    @+

    Bestall666

  9. #9
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    Tu aurais dû commencer par là.

    C'est un problème tout à fait "logique". Effectivement avec OldValue, tu devrais pouvoir t'en sortir assez simplement. Mais il te faut tester aussi si l'enregistrement en cours est nouveau ou pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Dim str As String
        str = Nz([Titre Film], vbNullString)
        If Len(str) > 0 Then
            If Not Me.NewRecord And str = [Titre Film].OldValue Then Exit Sub
            If FilmExiste(str) Then
    ...
    Et au passage, au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        If rst.RecordCount > 0 Then
            FilmExiste = True
        Else
            FilmExiste = False
        End If
    tu peux faire une ligne de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FilmExiste = rst.RecordCount > 0
    (\ _ /)
    (='.'=)
    (")-(")

  10. #10
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2003
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2003
    Messages : 453
    Points : 500
    Points
    500
    Par défaut
    Merci Fred cela fonctionne nickel !!!!!!

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

Discussions similaires

  1. Gestion des doublons
    Par moilou2 dans le forum IHM
    Réponses: 21
    Dernier message: 28/02/2008, 12h39
  2. Gestion des doublons
    Par Arsene12 dans le forum WinDev
    Réponses: 2
    Dernier message: 04/12/2007, 18h21
  3. Requete SQL sous Access : gestion des doublons
    Par mcroz dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 27/02/2007, 16h37
  4. Gestion des doublons et dlookup
    Par bestall666 dans le forum Access
    Réponses: 5
    Dernier message: 14/02/2007, 23h01

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