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 :

Doublons récalcitrants à l'effacement


Sujet :

Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2021
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2021
    Messages : 43
    Points : 24
    Points
    24
    Par défaut Doublons récalcitrants à l'effacement
    Bonjour à tous ,

    Dans le déroulement d'une procédure, je veux transférer des enregistrements d'une table "T_Bas Payns Archives" dans une table "T_Licences tardives" de structure parfaitement identique, en suppriment les doublons pour ne conserver que les enregistrements les plus récents.

    Les enregistrements sont indexés sur le champ [N° Licence] et le tri doit s'effectuer sur le champ [AnnéeDep] (nombre entier)

    J'ai utilisé ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ' Action 8: Supprimer les doublons dans "T_Licences tardives" en conservant le plus récent'
        Dim sqlDeleteDupesInTardives As String
        sqlDeleteDupesInTardives = "DELETE FROM [T_Licences tardives] WHERE [N° Licence] & [AnnéeDep] NOT IN (" & _
                                   "SELECT [N° Licence] & Max([AnnéeDep]) FROM [T_Licences tardives] GROUP BY [N° licence])"
        db.Execute sqlDeleteDupesInTardives, dbFailOnError
    Mais il retourne un jeu d'enregistrements conservant systématiquement un doublon.
    Nom : T_Bas Payns Archives.jpg
Affichages : 64
Taille : 72,3 Ko
    Nom : T_Licences tardives.jpg
Affichages : 65
Taille : 57,4 Ko

  2. #2
    Modérateur

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

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

    Une méthode brutale :
    1. Définir un index unique sur ce que tu veux qui soit unique.
    2. Faire une requête d'insertion qui ajoute les enregistrements que tu veux sans te préoccuper des doublons.
    3. Exécuter la requête d'insertion en ignorant les erreurs.
    4. Tu vas te retrouver avec seulement un seul enregistrement, tous les doublons vont être rejetés automatiquement par Access.


    Méthode plus délicate :
    1. Définir un index unique sur ce que tu veux qui soit unique.
      Ça c'est pour te garantir absolument que tu n'auras pas de doublons.
    2. Faire une requête qui s'assure que les enregistrements que tu veux ajouter ne sont pas déjà dans la table destinatrice.
    3. Faire une requête pour éliminer les éventuels doublons restant dans la requête précédente.
    4. Se servir de la requête épurée comme source de l'ajout.


    Perso je trouve que faire plusieurs requêtes séparées facilites la compréhension et surtout la mise au point.
    À chaque étape tu travailles sur un seul enjeu à la fois et tu peux voir les résultats au fur et à mesure.

    A+

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2021
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2021
    Messages : 43
    Points : 24
    Points
    24
    Par défaut
    Bonjour marot_r

    je vais me lancer dans la deuxième méthode. Elle me parait plus facilement "ajustable" à mes petits caprices.
    Mais franchement, sélectionner le [AnnéeDep] le plus élevé parmi ceux ayant un lien commun avec [N° Licence] me paraissait simplissime. Trop peut-être.

    Vu que je suis aussi doué avec Access que ma femme avec un horodateur, je pense repasser par ici dans quelques temps

    Merci pour ta réponse!

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 842
    Points : 14 946
    Points
    14 946
    Par défaut
    bonsoir,
    j'ai peut être mal compris mais pour moi, la requête fonctionne: à gauche la table, à droite la requête de suppression en affichage:

    Nom : _0.JPG
Affichages : 54
Taille : 87,4 Ko

    et la table après exécution de la suppression:

    Nom : _1.JPG
Affichages : 52
Taille : 79,7 Ko

    il ne reste que les enregistrements les plus récents comme tu le voulais

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2021
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2021
    Messages : 43
    Points : 24
    Points
    24
    Par défaut
    Bonjour Tee_grandbois !

    Pour le moment, ça ne fonctionne toujours pas et, effectivement, il n'y a pas de raison puisque pour toi ça roule.
    Je suppose que la partie antérieure du code doit interférer. Je cherche dans ce sens...
    (Désolé pour le délai de réaction, mais les petits soucis liés à l'âge emplissent ma vie de péripéties)

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