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 :

Éviter un double enregistrement dans une table


Sujet :

Access

  1. #1
    Membre habitué
    Homme Profil pro
    administartion
    Inscrit en
    Avril 2017
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : administartion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2017
    Messages : 345
    Points : 135
    Points
    135
    Par défaut Éviter un double enregistrement dans une table
    Bonjour,

    je cible ma question directement comme suit:

    une table contiens plusieurs champs, mais les les champs que je voudrais éviter qu'il est un double enregistrement c'est date Départ et Reprise en sachant que la relation de cette table est le Matricule employé.

    en résumé éviter d'avoir cette situation .....

    Merci d'avance.
    Images attachées Images attachées  

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Tu peux mettre un index unique composé de [Matricukle], [Date Deart], Date Reprise]
    Cela évitera les doubles exacts (même employé, même dates de début et de fin) mais ne te mettra pas à l'abris des recouvrements de période.
    Personnellement je coderai en VBA avant Modif et Avant Insertion du formulaire dans mon formulaire de saisie une vérification du type :

    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 function EstDouble() as boolean
       dim result as boolean
     
       dim critere as string
       critere= format(me.[Date Depart], "yyyy\-mm\-dd") & "<=[Date Depart] and [Date Depart]<=#" & format(me.[Date Reprise], "yyyy\-mm\-dd") 'Commence dans la période
       critere = critere & " or " & format(me.[Date Depart], "yyyy\-mm\-dd") & "<=[Date Reprise] and [Date Reprise]<=#" & format(me.[Date Reprise], "yyyy\-mm\-dd") 'Fini dans la période
       critere = critere & " or " & format(me.[Date Depart], "yyyy\-mm\-dd") & "<=[Date Depart] and [Date Reprise]<=#" & format(me.[Date Reprise], "yyyy\-mm\-dd") 'est inclus dans la période
     
       if dcount("No", "TaSource", "[Matricule]=" & me.[Matricule] & " and (" & critere & ")")<>0 then
          result=true
        else
          result=false
       end if
     
       EstDouble=result
    end function
    et dans chacun des événements :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if estDouble() then
        msgbox "Il y a un double !"
        cancel=true  'Annule l'événement
    end if
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Autre idée :

    dés la saisie de la date vérifier si elle n'est pas déjà présente (même type de contrôle sauf l'encadrement) et le signaler immédiatement à l'utilisateur plutôt que d'attendre qu'il ai fini sa saisie.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  4. #4
    Membre habitué
    Homme Profil pro
    administartion
    Inscrit en
    Avril 2017
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : administartion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2017
    Messages : 345
    Points : 135
    Points
    135
    Par défaut
    Bonjour,

    J'ai utilisé index unique pour le matricule.....mais le problème c'est qu'au moment de faire un autre enregistrement pour le même employé (matricule) c'est impossible de le faire.

    car le principe c'est que pour chaque Matricule unique il y'a différentes dates départ et retour. mais pas identiques.

  5. #5
    Membre habitué
    Homme Profil pro
    administartion
    Inscrit en
    Avril 2017
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : administartion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2017
    Messages : 345
    Points : 135
    Points
    135
    Par défaut
    bjr
    Images attachées Images attachées  

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    J'ai utilisé index unique pour le matricule.....mais le problème c'est qu'au moment de faire un autre enregistrement pour le même employé (matricule) c'est impossible de le faire.
    C'est normal et c'est pour cela qu'il faut faire un index unique composé avec les 3 champs : matricule, début et fin.

    Tu vas dans l'écran des indexes.
    1. Dans la 1ère colonne tu mets un nom (personnellement je l'appelle "Unicite")
    2. Dans la 2ième colonne tu choisis ton matricule.
    3. Tu coches "Unique" en bas.
    4. Dans la 2ième colonne de la ligne suivante, la date de début
    5. Dans la 2ième colonne de la ligne suivante, la date de fin


    Tu vas obtenir un index unique basé sur les 3 valeurs.

    Tu peux faire un test en entrant 2 fois les mêmes informations pour le matricule, le début et la fin.
    Access va "crier" et refusera le 2ième enregistrement.

    Attention si un des champs est nul, Access ne détecte plus l'unicité.
    Tu peux avoir un nombre infini de par exemple Matricule, Date Début, Null avec le même matricule et la même date de début et Access ne dira absolument rien :-(.
    Si tu as le risque d'avoir des données de type, il faut le gérer par programme.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Membre à l'essai
    Femme Profil pro
    secrétaire
    Inscrit en
    Avril 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : secrétaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2017
    Messages : 8
    Points : 14
    Points
    14
    Par défaut
    Le plus simple serait un identifiant de table du type clé double (sélectionner à la fois le matricule et la date de départ, puis définir comme clé).

    De même il faut éviter d'avoir trop de données baladées d'une table à l'autre. Ainsi, si le champ "nom" vient d'une autre table, il vaut mieux le supprimer de la présente table -- on peut toujours l'appeler de manière simple avec une requête basique quand les tables sont liées, en particulier si le matricule est l'identifiant unique pour les employés (ajouter les deux tables à la requête, afficher le champ "nom" de la table "employés", puis faire le reste de la requête normalement).

    En n'utilisant pour la clé combinée que le marticule (qui fait le lien avec la table "employés") et la date de départ, on évite les recouvrements possibles. Si plusieurs déplacements peuvent être comptabilisés dans une même journée, inclure les heures de départ et retour évitera à nouveau les doublons.

  8. #8
    Membre habitué
    Homme Profil pro
    administartion
    Inscrit en
    Avril 2017
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : administartion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2017
    Messages : 345
    Points : 135
    Points
    135
    Par défaut
    salut marot_r,

    sa marche 10/10 je te remercie infiniment.

    on se retrouvent prochainement pour d'autres questions.

    Merci encore.
    Images attachées Images attachées  

  9. #9
    Membre habitué
    Homme Profil pro
    administartion
    Inscrit en
    Avril 2017
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : administartion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2017
    Messages : 345
    Points : 135
    Points
    135
    Par défaut
    Bonjour MAROT,

    j'ai eu un blocage en utilisant le module suivant...merci pour votre aide...
    Images attachées Images attachées  

  10. #10
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Mon code supposait que tu mettais la fonction "dans" le formulaire, pas dans une module à part.
    Me. se réfère à l'objet en cours, ici le formulaire.
    Désolé j'aurais du le préciser.

    Est-ce que tu prévois de te servir de cette fonction dans un autre formulaire ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  11. #11
    Membre habitué
    Homme Profil pro
    administartion
    Inscrit en
    Avril 2017
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : administartion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2017
    Messages : 345
    Points : 135
    Points
    135
    Par défaut
    bonjour,

    oui le code m’intéresse et je voudrais l’utilisé dans mon formulaire.

    en me disant de mettre la fonction "dans" le formulaire, si j'ai compris c'est bien comme suis ??:...



    Merci A+


    je profite de l'occasion de poser une autre question comment rechercher des information dans une table en utilisant une zone de liste en sachant que le matricule et unique (index unique etque j'ai nommé comme tu me la conseillé "Unicite".......mon modele en PJ) . ...MERCI
    Fichiers attachés Fichiers attachés

  12. #12
    Membre habitué
    Homme Profil pro
    administartion
    Inscrit en
    Avril 2017
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : administartion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2017
    Messages : 345
    Points : 135
    Points
    135
    Par défaut
    bjr,

    j'ai pu utiliser un petit code vba pour la recherche qui st comme suit:

    Private Sub txtnomclents_AfterUpdate()

    txtcodeclient = txtnomclents.Column(0)
    txtcodeclient = txtnomclents.Column(1)
    txtcontact = txtnomclents.Column(2)
    txtadresse = txtnomclents.Column(3)
    txtville = txtnomclents.Column(4)
    txtcp = txtnomclents.Column(5)
    txtpays = txtnomclents.Column(6)
    txttelephone = txtnomclents.Column(6)
    txtfax = txtnomclents.Column(8)

    End Sub


    Merci

  13. #13
    Membre habitué
    Homme Profil pro
    administartion
    Inscrit en
    Avril 2017
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : administartion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2017
    Messages : 345
    Points : 135
    Points
    135
    Par défaut
    bonjour,

    je ne sais pas comment utilisé ces codes merci.
    Images attachées Images attachées  

  14. #14
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Il faut mettre le code qui teste EstDouble (La 2ième image) dans une procédure événementielle associée aux événements Avant Mise à jour et Avant Insertion.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  15. #15
    Membre habitué
    Homme Profil pro
    administartion
    Inscrit en
    Avril 2017
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : administartion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2017
    Messages : 345
    Points : 135
    Points
    135
    Par défaut
    Bonjour,

    La deuxième code qui teste EstDouble est comme suit dans mon formulaire (voir la pièce jointe)

    Pour le premier code je l’ai installé dans un module (voir la pièce jointe)

    je te remercie d'avance Marot.
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. Position d'un enregistrement dans une table ou requête Query
    Par polinevol dans le forum Bases de données
    Réponses: 3
    Dernier message: 21/01/2006, 03h53
  2. Position d'un enregistrement dans une table
    Par polinevol dans le forum Bases de données
    Réponses: 1
    Dernier message: 16/01/2006, 09h10
  3. [WD9] Cliquer sur des enregistrements dans une table
    Par oz80 dans le forum WinDev
    Réponses: 2
    Dernier message: 15/12/2005, 20h11
  4. Nombre d'enregistrement dans une table MySQL
    Par tom06440 dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 21/10/2005, 19h07
  5. AJOUT d'un ENREGISTREMENT dans UNE TABLE
    Par ramo dans le forum Bases de données
    Réponses: 2
    Dernier message: 01/08/2005, 16h24

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