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 :

Gestion des doublons avec 2 champs indexés


Sujet :

VBA Access

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2003
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 avec 2 champs indexés
    Bonjour

    J'ai la table suivante :

    FILM(IDFilm, TitreFilm, TitreVOFilm, DureeFilm, AnneeFilm, ResumeFilm)

    Afin d'éviter les doublons j'ai crée un index UNIQUE composé des champs TitreFilm et AnneeFilm.

    J'ai créé une requête paramétrée et une fonction qui vérifie l'existence de ce film !!!!

    Voici le code :

    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
     
    Public Function FilmExiste(strTitreFilm As String, strAnneeFilm As String) As Boolean
    On Error GoTo Err_FilmExiste
        Dim rst As DAO.Recordset
        Dim oQdf As DAO.QueryDef
     
        'Vérifie l'existance d'un film dont le titre est passé en paramètre
        'Renvoie True si le film existe
     
        Set oQdf = CurrentDb.QueryDefs("qryFilmExiste")
        oQdf.Parameters("parmTitre").Value = strTitreFilm
        oQdf.Parameters("parmAnnee").Value = strAnneeFilm
        Set rst = oQdf.OpenRecordset()
     
        FilmExiste = rst.RecordCount > 0
     
        rst.Close
        Set rst = Nothing
     
        Exit Function
     
    Err_FilmExiste:
        MsgBox Err.Description
        Exit Function
     
    End Function
    Puis sur l'évènement "AvantMAJ" du champ année :

    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
    37
    38
    39
    40
     
     
    Private Sub AnneeFilm_BeforeUpdate(Cancel As Integer)
    On Error GoTo Err_AnneeFilm_BeforeUpdate
        'On vérifie que l'année saisie est bien numérique et sur 4 chiffres
     
        If Not IsNull([AnneeFilm]) And Not IsNumeric([AnneeFilm]) Then
            Cancel = True
            AfficherErreur "L'Année de Production du Film doit être Numérique.", "Erreur de Saisie"
            [AnneeFilm].SelStart = 0
            [AnneeFilm].SelLength = Len([AnneeFilm])
        ElseIf Len([AnneeFilm]) < 4 Then
            Cancel = True
            AfficherErreur "L'Année de Production du Film doit être saisie sur 4 chiffres.", "Erreur de Saisie"
            [AnneeFilm].SelStart = 0
            [AnneeFilm].SelLength = Len([AnneeFilm])
        End If
     
     
        'On vérifie l'existence du film
     
        Dim strTemp As String
        Dim strTemp2 As String
     
        strTemp = Nz([TitreFilm], vbNullString)
     
        If Len(strTemp) > 0 Then
            If FilmExiste(strTemp, [AnneeFilm]) Then
                AfficherErreur "Ce film existe déjà dans la base de données.", "Erreur de Saisie"
                Cancel = True
            End If
        End If
     
        Exit Sub
     
    Err_AnneeFilm_BeforeUpdate:
        MsgBox Err.Description
        Exit Sub
     
    End Sub
    J'aimerais sur le formulaire de saisie, afficher un message d'erreur lors de la saisie sur un doublon !!

    Quelle est la mailleure méthode ?

  2. #2
    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
    Bonjour,

    J'aurais mis le code sur BeforeUpdate du formulaire, mais à part ça, c'est déjà pas mal L'idée est bonne, le code de la fonction est correct

    Une autre solution aurait été de ne pas créer de fonction et d'intercepter l'erreur sur l'évènement Sur Erreur du formulaire. La table n'acceptant pas les doublons à cause de l'index, l'erreur sera forcément levée à la tentative de mise à jour.

    Deux stratégies différentes, c'est au goût de chacun

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2003
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 Tofalu Voir le message
    Bonjour,

    J'aurais mis le code sur BeforeUpdate du formulaire, mais à part ça, c'est déjà pas mal L'idée est bonne, le code de la fonction est correct

    Une autre solution aurait été de ne pas créer de fonction et d'intercepter l'erreur sur l'évènement Sur Erreur du formulaire. La table n'acceptant pas les doublons à cause de l'index, l'erreur sera forcément levée à la tentative de mise à jour.

    Deux stratégies différentes, c'est au goût de chacun
    Merci pour la réponse

    J'avais testé sur l'évènement "sur erreur " rapidement ; je ressaie demain en espérant d'autres astuces !!

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 453
    Points : 500
    Points
    500
    Par défaut
    Bonjour

    pas eu le temps de tester !!!

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2003
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 Tofalu Voir le message
    Bonjour,

    Une autre solution aurait été de ne pas créer de fonction et d'intercepter l'erreur sur l'évènement Sur Erreur du formulaire. La table n'acceptant pas les doublons à cause de l'index, l'erreur sera forcément levée à la tentative de mise à jour.
    Oui mais si je clique sur le bouton fermer cela crée un enregistrement avec l'année vide, ce que je voudrais éviter !!!

    Voici le code :

    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
     
     
    Private Sub Form_Error(DataErr As Integer, Response As Integer)
    On Error GoTo Err_Form_Error
     
        'Contrôle des erreurs de saisie
     
        Select Case DataErr
            Case 3314 'Titre du Film Obligatoire
                AfficherErreur "Vous devez indiquer le Titre du Film.", "Saisie Obligatoire"
                Response = acDataErrContinue
            Case 3022 'Film existant
                AfficherErreur "Ce Film existe déjà dans la base de données.", "Erreur de Saisie"
                Response = acDataErrContinue
            Case 2169 'Erreur lors de la fermeture par la croix
                blnFermeture = True
                Response = acDataErrContinue
            Case Else 'Autres Cas
                Response = acDataErrDisplay
        End Select
     
        Exit Sub
     
    Err_Form_Error:
        MsgBox Err.Description
        Exit Sub
     
    End Sub
    J'ai supprimé la fonction et la requête paramétrée

    Merci d'avance pour l'aide

Discussions similaires

  1. [DATA] Gestion des doublons avec données discordantes ou incomplètes
    Par Xou51 dans le forum SAS Base
    Réponses: 7
    Dernier message: 29/05/2014, 20h10
  2. Réponses: 1
    Dernier message: 10/08/2010, 18h55
  3. gestion des textbox avec un index
    Par thierry007 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 16/03/2007, 10h13
  4. Réponses: 13
    Dernier message: 12/01/2006, 10h45
  5. Class de gestion des images avec rotation
    Par Johnny Boy dans le forum MFC
    Réponses: 1
    Dernier message: 03/05/2005, 11h54

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