1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.
  2. Bonjour tout le monde ! Veillez consulter la Politique de forum pour comprendre nos règles, Merci a vous !
    Rejeter la notice

Parcours de table HFSQL et gestion des doublons

Discussion dans 'Résolution problème & conseils' créé par Bip_bip, Mar 23, 2018.

  1. Bip_bip

    Bip_bip Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    51
    J'aime reçus:
    28
    Bonjour à tous,

    je cherche à supprimer les enregistrements d'une table de mon analyse dont la première colonne contient des doublons (la condition et le parcours doivent se faire sur celle ci...) , comment géreriez vous ça...?

    Par l'index, les enregistrements, requêtes, il y a tellement de fonctions que je suis un peu perdu (je débute...)

    Merci de vos éclaircissements...

    Bip...
     
  2. gapplicat

    gapplicat Well-Known Member
    MEMBRE WX

    Inscrit:
    Mar 8, 2018
    Messages:
    399
    J'aime reçus:
    707
    J'utilise cette requête pour supprimer des doublons, si cela peut t'aider tu peux l'adapter à ton cas.

    Code (Text):


    Reqsql est une chaîne
    Bdata est une Source de Données
    //*****************************SUPPRESSION DIRECTE************************************
    //Reqsql = "DELETE FROM util LEFT OUTER JOIN (SELECT MIN(util.IDutil) as id, util.uti_nom FROM util GROUP BY util.uti_nom) AS util2 ON util.IDutil = util2.id WHERE util2.id is NULL"
    //***********************************************************************************
    Reqsql = "SELECT * FROM util LEFT OUTER JOIN (SELECT MIN(util.IDutil) as id, util.uti_nom FROM util GROUP BY util.uti_nom) AS util2 ON util.IDutil = util2.id WHERE util2.id is NULL"
    SI HExécuteRequêteSQL(Bdata,connex,hRequêteDéfaut,Reqsql) ALORS
    POUR TOUT Bdata
    //******************SUPPRESSION AVEC CODE windev ***********************
    //hlitrecherchepremier(util,IDutil,bdata.idutil)
    //si htrouve(util) ALORS
    //hsupprime(util,hNumEnrEnCours)
    //FIN
    // *********************************************************************
    Trace(Bdata.idutil+ " : "+Bdata.uti_nom)
    FIN
    SINON
    Info(HErreurInfo())
    FIN
     
    ou peut être cette procédure (Attention je l'ai faite de tête et je ne l'ai pas testée)

    Code (Text):

    HlitPremier(Fic,Rub)
    TantQue pas HEndehors()
      hmodifie(Fic)
      Si HErreurDoublon() alors Hsupprime(Fic)
      HLitsuivant(Fic,Rub)
    Fin
     
    Donc en modifiant si un erreur de doublon est rencontrée on supprime l'enregistrement et voila
    Il faut bien sur parcourir le fichier sur le cle primaire
     
    Deft54 et charlie aiment ça.
  3. Bip_bip

    Bip_bip Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    51
    J'aime reçus:
    28
    Merci gapplicat pour tes bonnes idées, mais j'ai une clé primaire qui accepte les doublons du coup HErreurDoublon ne fonctionne pas, j'ai donc opté pour une requête avec Min(Date) et je recup mes données comme il faut dans une nouvelle table.
    Merci de tes bouts de codes, j'ai appris de nouvelles fonctions au passage...
     
  4. gapplicat

    gapplicat Well-Known Member
    MEMBRE WX

    Inscrit:
    Mar 8, 2018
    Messages:
    399
    J'aime reçus:
    707
    "une clé primaire qui accepte les doublons" :eek:pas bon ça pout l'intégrité référentielle....
     
  5. postmanwindev

    postmanwindev Member
    MEMBRE WX

    Inscrit:
    Mar 30, 2018
    Messages:
    105
    J'aime reçus:
    23
    Question pour quoi une clef avec doublon pour ensuite supprimer les doublons et ensuite ce que tu veux supprimer il est de quel type ?
     
  6. charlie

    charlie Active Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    201
    J'aime reçus:
    190
    fait une clé composé dans ton fichier unique
    conacatène dans ta table la colonne de ta clé avec doublons avec une colonne où sera une valeur unique, reliée ensuite à ta clé composée
    enfin , juste une idée comme ça....
     
  7. Xlnzz

    Xlnzz Member

    Inscrit:
    Mar 26, 2018
    Messages:
    15
    J'aime reçus:
    28
    La solution la plus pratique reste d'empêcher le doublon à la création de l'enregistrement avec un petit message à l'utilisateur, "articles déjà présent dans votre base de données" quelque chose dans le genre.
    C'est la solution la plus économique, c'est toujours délicat de devoir supprimer en enregistrement,

    Réparer c'est bien mais prévenir c'est mieux !

    Mieux vaut prévenir que guérir ! :)
     
  8. postmanwindev

    postmanwindev Member
    MEMBRE WX

    Inscrit:
    Mar 30, 2018
    Messages:
    105
    J'aime reçus:
    23
    sinon pour supprimer il faut d'abord rendre ta rubrique de recherche clef
    ensuite tu crée une table fichier où tu affiche ton fichier
    ensuite tu fais un parcoure en deux boucle imbriqué une pour parcourir les ligne de ta table l'autre pour vérifier que la ligne encours n'as pas de doublon a chaque fois qu'elle trouve un doublon elle supprime ,un doublon bien sur hormis la ligne en cours .
     
    estoriquespace apprécie ceci.
  9. Xlnzz

    Xlnzz Member

    Inscrit:
    Mar 26, 2018
    Messages:
    15
    J'aime reçus:
    28

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    sinon pour supprimer il faut d'abord rendre ta rubrique de recherche clef
    ensuite tu crée une table fichier où tu affiche ton fichier
    ensuite tu fais un parcoure en deux boucle imbriqué une pour parcourir les ligne de ta table l'autre pour vérifier que la ligne encours n'as pas de doublon a chaque fois qu'elle trouve un doublon elle supprime ,un doublon bien sur hormis la ligne en cours .
    Cliquez pour agrandir...
    Juste pour eviter des doublons dans un fichier de données ...?
    Ca me parait un peu drastique ....excuse moi

    Les gars...j'aimerais pas être votre responsable de projet...ou bien la personne qui vous paye lol....
     
  • postmanwindev

    postmanwindev Member
    MEMBRE WX

    Inscrit:
    Mar 30, 2018
    Messages:
    105
    J'aime reçus:
    23

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Juste pour eviter des doublons dans un fichier de données ...?
    Ca me parait un peu drastique ....excuse moi

    Les gars...j'aimerais pas être votre responsable de projet...ou bien la personne qui vous paye lol....
    Cliquez pour agrandir...
    Et bien monsieur je n’aimerais pas vous avoir comme patron enfin moi je debute et j’aide comme je peux je n’aurais pas dû peut etre enfin eclairez nous par votre sagesse
     
  • postmanwindev

    postmanwindev Member
    MEMBRE WX

    Inscrit:
    Mar 30, 2018
    Messages:
    105
    J'aime reçus:
    23
    Pour continuer mr celui qui a posté le sujet ne demande pas comment eviter les doublons ça nous savons bien il demande comment corriger le tir et supprimer des doublons j’attends votre idée pour apprendre de vous
     
  • gapplicat

    gapplicat Well-Known Member
    MEMBRE WX

    Inscrit:
    Mar 8, 2018
    Messages:
    399
    J'aime reçus:
    707
    Une piste...

    Faire une requete SQL qui te liste les doublons, pour les supprimer
    Ici dans mon exemple doublon sur ID (a tester car fait sans windev, juste avec ma petite tête et mes gros doigts...

    Code (Text):


    REQ_Liste_Produits est une Source de Données

    HExécuteRequête(REQ_Liste_Produits,  "SELECT ID, COUNT(*) AS count FROM personne GROUP BY ID HAVING COUNT(*) > 1 ")

    // Parcours de la requête
    POUR TOUT REQ_Liste_Produits
     Hlitrecherche(PRESONNE,ID, sFichierRequete.ID)
     si htrouve() alors
       Hsupprime(PERSONNE)
     fin
     

    FIN

     
    ou avec une simple requête... (De tète aussi - à tester )

    Le fichier s'appelle PERSONNE
    et la rubrique a doublon : ID

    Code (Text):


    DELETE doublons.*
    FROM  PERSONNE AS doublons
    INNER JOIN (
       SELECT questionNumb, MIN(id) AS plus_petit_id
       FROM PERSONNE
       GROUP BY questionNumb
       HAVING COUNT(*) > 1
    ) AS a_garder
    ON a_garder.questionNumb = doublons.questionNumb
    AND a_garder.plus_petit_id <> doublons.id


     
     
    #12 gapplicat, Mar 31, 2018
    Dernière édition: Mar 31, 2018
    suenodesign apprécie ceci.
  • Bip_bip

    Bip_bip Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    51
    J'aime reçus:
    28
    Juste pour clarifier un peu, je récupère des données dans un fichier Excel, je les importe dans une base et ensuite je les traite, sachant que je ne peux toucher aux doublons de la première colonne car j'ai besoin des infos des colonnes adjacentes (dates) pour créer une table avec des dates de début et de fin afin de calculer un délai...je ne sais pas si c'est bien clair...
    j'ai résolu mon souci en effectuant plusieurs requêtes... et des boucles de comparaison.
     
  • elhacene

    elhacene Active Member
    MEMBRE WX

    Inscrit:
    Jan 14, 2018
    Messages:
    299
    J'aime reçus:
    150

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Question pour quoi une clef avec doublon pour ensuite supprimer les doublons et ensuite ce que tu veux supprimer il est de quel type ?
    Cliquez pour agrandir...
    mettre une clé en doublon permet d'avoir le parcours et la recherche loupe et la saisie assité dans les champs ou pour accélérer une requet :cool:
     
  • Partager cette page

    Chargement...