| |
Posté le 16 novembre 2005 - 13:33 |
salut, j'ai un fichier HF de 5 millions d'enregistrementset j'ai une clé (DCN) qui est en plusieurs doubles. donc pour régler ce probleme j'ai essayé le code suivant:
HLitPremier(immeuble,DCN) TANTQUE PAS HEnDehors(immeuble) HModifie(immeuble) SI HErreurDoublon() ALORS HSupprime(immeuble) FIN HLitSuivant(immeuble,DCN) FIN
donc en exécutant, à chaque suppression de doublons il ya un message d'erreur qui s'affiche et je dois valider NON pour que ca supprime le doublons. le probleme c'est qu'il ya beaucoup d'enregistrement . est ce que quelqu'un peut m'aider SVP? MERCI d'avance |
| |
| |
| | | |
|
| | |
| |
Posté le 16 novembre 2005 - 15:20 |
Il se trouve que issam a formulé :
salut, j'ai un fichier HF de 5 millions d'enregistrementset j'ai une clé (DCN) qui est en plusieurs doubles. donc pour régler ce probleme j'ai essayé le code suivant: HLitPremier(immeuble,DCN) TANTQUE PAS HEnDehors(immeuble) HModifie(immeuble) SI HErreurDoublon() ALORS HSupprime(immeuble) FIN HLitSuivant(immeuble,DCN) FIN donc en exécutant, à chaque suppression de doublons il ya un message d'erreur qui s'affiche et je dois valider NON pour que ca supprime le doublons. le probleme c'est qu'il ya beaucoup d'enregistrement . est ce que quelqu'un peut m'aider SVP? MERCI d'avance
Salut, J'ai une requete SQL qui permet de visualiser les enregistrements en double. J'espère que ca pourra t'aider.
select IDUNIQUE,count(IDUNIQUE) from monfichier group by IDUNIQUE having count(*)>1
Dans le même style, mais avec suppression automatique des enreg en double (attention elle prend un certain temps si bcp d'enreg)
DELETE FROM monfichier WHERE IDUNIQUE IN (select IDUNIQUE from monfichier group by IDUNIQUE having count(*)>1)
Par contre, je crois que la requete supprime TOUS les enreg en double !
-- Bon développement à tous Christian
cciochir@ _ at _ cmii.fr |
| |
| |
| | | |
|
| | |
| |
Posté le 16 novembre 2005 - 15:37 |
effectivement ca permet de supprimer tous les enregistrements en double par contre pour mon cas je dois garder un seul enregistrement parmi ceux qui sont en doubles. si vous pouvez m'aider encore fois je veux bien sinon Merci pour votre aide:).
I.B. |
| |
| |
| | | |
|
| | |
| |
Posté le 16 novembre 2005 - 15:49 |
salut
une solution peut consister en créant un alias du fichier puis d'y ajouter les enregistrements un par un en testant le doublon dans l'alias puis supprimer le fichier initial et renommer l'alias |
| |
| |
| | | |
|
| | |
| |
Posté le 16 novembre 2005 - 16:09 |
ca peut etre une idée mais je ne vois pas comment faire dans mon cas ? et ca peut marcher avec 5 millions d'enregistrement? merci d'avance |
| |
| |
| | | |
|
| | |
| |
Posté le 16 novembre 2005 - 17:15 |
je jette ça comme ça (pas testé)
soit le fichier contenant les doublons : FIC_ORG soit la clé unique de ce fichier : CLE_UNIK soit le fichier épuré : FIC_DEST
i est un entier = 1
// Création de l'alias hAlias("FIC_ORG","FIC_DEST") hCreation("FIC_DEST")
// Lecture du fichier hLit("FIC_ORG",i) tantque pas hendehors() // Recherche dans le fichier destination (simplifié) hRecherche("FIC_DEST","CLE_UNIK",FIC_ORG.CLE_UNIK) si pas hTrouve() alors // Copie l'enregistrement hCopieEnreg("FIC_DEST","FIC_ORG") hAjoute("FIC_DEST") fin i++ hLit("FIC_ORG",i) Fin
// Renomme le ficheir d'origine pour le sauvegarder fRenomme(<chemin complet>+"\FIC_ORG.FIC",<chemin complet>+"\FIC_ORG_SAV.FIC") // Faire de même pour le .NDX et éventuellement le .MMO
// Renomme le fichier épuré fRenomme(<chemin complet>+"\FIC_DEST.FIC",<chemin complet>+"\FIC_ORG.FIC") // Faire de même pour le .NDX et éventuellement le .MMO
Voilà ... il y a peut être des erreurs
A+ |
| |
| |
| | | |
|
| | |
| |
Posté le 16 novembre 2005 - 18:47 |
Regarde dans l'aide hErreurDoublon().
Bon dev. Jean-Pierre |
| |
| |
| | | |
|
| | |
| |
Posté le 16 novembre 2005 - 23:42 |
déactiver la fenetre auto de gestion des doublons avec HSurErreur ( "*" , hErrBlocage , "" ) ? |
| |
| |
| | | |
|
| | |
| |
Posté le 17 novembre 2005 - 12:17 |
j'ai essayé de mettre cette fonction -> HSurErreur ( "*" , hErrBlocage , "" ) mais ca donne toujours le meme message :
____le mécanisme de sécurité assisté de l'application WDTST été déclenché. Erreur de doublons sur a rubrique <typologie_constr.IDTypologie_constr>_____
voila mon code:
HLitPremier(typologie_constr,IDTypologie_constr) TANTQUE PAS HEnDehors(typologie_constr) HModifie(typologie_constr) SI HErreurDoublon() ALORS HSupprime(typologie_constr) FIN HLitSuivant(typologie_constr,IDTypologie_constr) FIN |
| |
| |
| | | |
|
| | |
| |
Posté le 17 novembre 2005 - 12:41 |
sinon pour régler de probleme de doublons j'ai une requete:
DELETE FROM typologie_constr WHERE IDTypologie_constr IN (select IDTypologie_constr from IDTypologie_constr group by IDTypologie_constr having count(*)>1)
mais ca me supprime les enregistrements qui sont en doubles et les doublons aussi je ne sais pas j'etais clair ! merci d avance |
| |
| |
| | | |
|
| | |
| |
Posté le 17 novembre 2005 - 13:43 |
Bonjour,
Une idée :
Une requete SQL utilisant
DISTINCT Utilisé avec l'instruction SELECT Supprime les enregistrements dupliqués (doublons) du résultat de la requête
Reprendre ces enregistrements dans un fichier temporaire
Supprimer tous les enregistrements du fichier initial et recopier ceux du fichier temporaire Cordialement
Albert |
| |
| |
| | | |
|
| | |
| |
Posté le 17 novembre 2005 - 13:44 |
HSurErreur ("*" , hErrBlocage ou hErrTout , "MaProcédure")
PROCEDURE MaProcédure() RENVOYER opAnnuler
à tester cordialement JCP
"issam" <i.belkaid@laposte.net> a écrit dans le message de news: 437c6080$1@news.pcsoft.fr...
j'ai essayé de mettre cette fonction -> HSurErreur ( "*" , hErrBlocage , "" ) mais ca donne toujours le meme message :
____le mécanisme de sécurité assisté de l'application WDTST été déclenché. Erreur de doublons sur a rubrique <typologie_constr.IDTypologie_constr>_____
voila mon code:
HLitPremier(typologie_constr,IDTypologie_constr) TANTQUE PAS HEnDehors(typologie_constr) HModifie(typologie_constr) SI HErreurDoublon() ALORS HSupprime(typologie_constr) FIN HLitSuivant(typologie_constr,IDTypologie_constr) FIN
|
| |
| |
| | | |
|
| | |
| |
Posté le 17 novembre 2005 - 14:36 |
HExécuteRequêteSQL ( REQ_SUPP , "SELECT DISTINCT * FROM typologie_constr")
donc je fais comment pour copier cette requete sur un fichier temporaire? |
| |
| |
| | | |
|
| | |
| |
Posté le 17 novembre 2005 - 15:31 |
issam a écrit :
salut, j'ai un fichier HF de 5 millions d'enregistrementset j'ai une clé (DCN) qui est en plusieurs doubles. donc pour régler ce probleme j'ai essayé le code suivant: HLitPremier(immeuble,DCN) TANTQUE PAS HEnDehors(immeuble) HModifie(immeuble) SI HErreurDoublon() ALORS HSupprime(immeuble) FIN HLitSuivant(immeuble,DCN) FIN donc en exécutant, à chaque suppression de doublons il ya un message d'erreur qui s'affiche et je dois valider NON pour que ca supprime le doublons. le probleme c'est qu'il ya beaucoup d'enregistrement . est ce que quelqu'un peut m'aider SVP? MERCI d'avance Bonjour
Il n'y a pas 36 solutions pour dédoublonner...
Un parcours selon la clé unique. Je préconise un parcours "à la remontée" en partant du bas vers le haut du fichier si on ne veux conserver que les 'dernières lignes' (qui deviennent les premières lues). A chaque modification de la clé on la récupère. Sinon, on supprime l'enregistrement et passe au suivant.
////////////////////////////////////////////////// cCle est une chaine hLitDernier(Immeuble,DCN) si pas HEnDehors(Immeuble) alors cCle=immeuble.DCN TANTQUE PAS HEnDehors(Immeuble) Si cCLe<>immeuble.DCN ALORS cCLe=immeuble.DCN SINON // C'est un doublon, on le supprime HSupprime(Immeuble) FIN hLitPrécédent(Immeuble,DCN) FIN //////////////////////////////////////////////////
Evidement, le traitement est foncttion du nombre d'occurrences mais il a l'avantage de ne faire qu'un unique parcours séquentiel qui, avec les ordres hXXX, est trés rapide (plus en tout cas qu'en SQL). Si on ajoute que cette solution ne comporte aucune recherche, on peut dire être à l'optimum.
La gestion des doublons est une évidence pour la suite...
++ R&B WDForge.org |
| |
| |
| | | |
|
| | |