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

WinDev Discussion :

fusion de donnée dans une table mémoire [WD25]


Sujet :

WinDev

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2019
    Messages : 43
    Points : 6
    Points
    6
    Par défaut fusion de donnée dans une table mémoire
    Salam alaikoum tous le monde,
    Je travail sur une petite application qui fait le suivant :
    Il s'agit d'un champs table mémoire qui contient des données charger à partir un fichier de type texte (*.txt), le code teste s'il existe des doublons dans la table mémoire, la table mémoire dans cet exemple contient 274 lignes.
    - pour chaque ligne (N), une recherche des doublons est effecteur à partir de la ligne (N+1)
    - doublon existe les données d'une ligne, selon une condition bien précise et la l'autre ligne est supprimer.


    Il n'existe pas de champ indicé de nom COL_Mnt3[2] à l'indice 273.

    Pile des appels :
    Sélection du menu de MENU_SansNom1.OPT_Fusionné_doublons (FI_Chargement.MENU_SansNom1.OPT_Fusionné_doublons), ligne 85

    Date : 08/01/2021 12:59:53
    Projet : G_Das (1.65K)

    Informations supplémentaires :
    Code erreur : 10074
    Module : 'wd250obj.dll (01F250083h - 25.0.375.15)
    EIT_TYPE_WDFILE : <8>
    EIT_IDCODE : <32>

    Comment résoudre ce problème svp ?

  2. #2
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 808
    Points : 5 267
    Points
    5 267
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par youcef16dz Voir le message
    - pour chaque ligne (N), une recherche des doublons est effecteur à partir de la ligne (N+1)
    Donc à la ligne 274, il va vérifier si la ligne 275 (qui n'existe pas dans ton cas) est un doublon.
    C'est certainement ce qui t'arrive, une ou plusieurs ligne ont été supprimées et tu pointes sur une zone qui n'existe plus.

    Dans le cas de suppressions, il est préférable de commencer par la fin :
    du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Pour LigneEnCours=Occurence _A_ 1 PAS -1
    TraiterDoublon()
    FIN
    Une autre solution, qui évite la recherche a posteriori est d'utiliser un TableCherche avant l'ajout de la ligne, s'il y a un doublon, on n'ajoute pas la ligne
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2019
    Messages : 43
    Points : 6
    Points
    6
    Par défaut
    le problème dans la colonne Col_Mnt3, quand je met le code qui manipule cette colonne en commentaire, ça marche a merveille sans incident,
    j'ai mis le nombre de ligne à tester a Tableoccurance()-1 il test la 273 ligne et il sort

  4. #4
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 808
    Points : 5 267
    Points
    5 267
    Billets dans le blog
    1
    Par défaut
    Avec ton code, on y verrait plus clair
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2019
    Messages : 43
    Points : 6
    Points
    6
    Par défaut
    Mon code est un peu barbare, plus que un peu,
    j'ai mis une étoile à la ligne ou ça bug, l'etoile n'existe dans l'appli

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    //déclaration variable 
    nNumLigne,IParcours, LigneEncours,nNbrLigne, nVarD1, nVarD2, nVarD3, nVarD4 sont des entier
    moVarMnt1, moVarMnt2, moVarMnt3, moVarMnt4, moVarMntAn sont des monétaires
    sVarSS, sVarNom, sVarPrénom, sVarDOB sont des chaînes
     
    //alimenter variable Numligne 
     
    POUR TOUT LIGNE DE TABLE_DAS
    	//affectation des valeurs dans les variables a partir de la ligne en cours
    	sVarSS =TABLE_DAS.COL_N_SS
    	sVarNom=TABLE_DAS.COL_Nom
    	sVarPrénom=TABLE_DAS.COL_Prénom
    	sVarDOB=TABLE_DAS.COL_DN
    	nVarD1=TABLE_DAS.COL_D1
    	nVarD2=TABLE_DAS.COL_D2
    	nVarD3=TABLE_DAS.COL_D3
    	nVarD4=TABLE_DAS.COL_D4
    	moVarMnt1=TABLE_DAS.COL_Mnt1
    	moVarMnt2=TABLE_DAS.COL_Mnt2
    	moVarMnt3=TABLE_DAS.COL_Mnt3
    	moVarMnt4=TABLE_DAS.COL_Mnt4
    	LigneEncours=IndiceEnCours()
    	nNbrLigne=TableOccurrence(TABLE_DAS)-1
    	//commence a vérifier l’existence des doublons à partir de la ligne qui suit la ligne en cours
    	nNumLigne=LigneEncours+1
    	POUR IParcours=nNumLigne À nNbrLigne
    		//vérifier le numéro de sécurité
    		SI Taille(SansEspace(sVarSS))<12 ALORS
    			//si le numéro d'assurance est faux on vérifier la correspondance des noms
    			SI sVarNom=TABLE_DAS.COL_Nom[IParcours] ALORS
    				//si le nom correspond on vérifier la correspondance des prénoms
    				SI sVarPrénom=TABLE_DAS.COL_Prénom[IParcours] ALORS
    					//si le prénom correspond ont vérifier la correspondance de la date de naissance
    					SI sVarDOB=TABLE_DAS.COL_DN[IParcours] ALORS
    						//additionner nombre de jour par trimestre
    						nVarD1=nVarD1+TABLE_DAS.COL_D1[IParcours]
    						nVarD2=nVarD2+TABLE_DAS.COL_D2[IParcours]
    						nVarD3=nVarD3+TABLE_DAS.COL_D3[IParcours]
    						nVarD4=nVarD4+TABLE_DAS.COL_D4[IParcours]
    						//additionner des montant cotisable par trimestre
    						moVarMnt1=moVarMnt1+TABLE_DAS.COL_Mnt1[IParcours]
    						moVarMnt2=moVarMnt1+TABLE_DAS.COL_Mnt2[IParcours]
    						moVarMnt3=moVarMnt1+TABLE_DAS.COL_Mnt3[IParcours]  *
    						moVarMnt4=moVarMnt1+TABLE_DAS.COL_Mnt4[IParcours]
    						//calcul du montant cotisable annuel
    						moVarMntAn=moVarMnt1+moVarMnt2+moVarMnt3+moVarMnt4
    						//réécrire les données dans la ligne 1
    						//choix de la ligne à écrire
    						SI Taille(SansEspace(TABLE_DAS.COL_DS))=0 ALORS
    						//écrire dans la ligne 1	
    						TABLE_DAS.COL_D1=VerifierNbrJour(nVarD1,90)
    						TABLE_DAS.COL_D2=VerifierNbrJour(nVarD2,90)
    						TABLE_DAS.COL_D3=VerifierNbrJour(nVarD3,90)
    						TABLE_DAS.COL_D4=VerifierNbrJour(nVarD4,90)
    						TABLE_DAS.COL_Mnt1=moVarMnt1
    						TABLE_DAS.COL_Mnt2=moVarMnt2
    						TABLE_DAS.COL_Mnt3=moVarMnt3
    						TABLE_DAS.COL_Mnt4=moVarMnt4
    						TABLE_DAS.COL_MntAn=moVarMntAn
    						SINON
    							//écrire dans la ligne 2	
    							TABLE_DAS.COL_D1[IParcours]	= VerifierNbrJour(nVarD1,90)
    							TABLE_DAS.COL_D2[IParcours]	= VerifierNbrJour(nVarD2,90)
    							TABLE_DAS.COL_D3[IParcours]	= VerifierNbrJour(nVarD3,90)
    							TABLE_DAS.COL_D4[IParcours]	= VerifierNbrJour(nVarD4,90)
    							TABLE_DAS.COL_Mnt1[IParcours]	= moVarMnt1
    							TABLE_DAS.COL_Mnt2[IParcours]	= moVarMnt2
    							TABLE_DAS.COL_Mnt3[IParcours]	= moVarMnt3
    							TABLE_DAS.COL_Mnt4[IParcours]	= moVarMnt4
    							TABLE_DAS.COL_MntAn[IParcours]	= moVarMntAn
    						FIN
    					FIN
    				FIN
    			FIN
    		SINON 
    			SI sVarSS=TABLE_DAS.COL_N_SS[IParcours]
    			//additionner nombre de jour par trimestre
    			nVarD1				= nVarD1+TABLE_DAS.COL_D1[IParcours]
    			nVarD2				= nVarD2+TABLE_DAS.COL_D2[IParcours]
    			nVarD3				= nVarD3+TABLE_DAS.COL_D3[IParcours]
    			nVarD4				= nVarD4+TABLE_DAS.COL_D4[IParcours]
    			//additionner des montant cotisable par trimestre
    			moVarMnt1			= moVarMnt1+TABLE_DAS.COL_Mnt1[IParcours]
    			moVarMnt2			= moVarMnt2+TABLE_DAS.COL_Mnt2[IParcours]
    			moVarMnt3			= moVarMnt3+TABLE_DAS.COL_Mnt3[IParcours]
    			moVarMnt4			= moVarMnt4+TABLE_DAS.COL_Mnt4[IParcours]
    			//calcul du montant cotisable annuel
    			moVarMntAn			= moVarMnt1+moVarMnt2+moVarMnt3+moVarMnt4
    			//réécrire les données dans la ligne 1
    				SI Taille(SansEspace(TABLE_DAS.COL_DS))=0 ALORS
    					//écrire dans la ligne 1	
    					TABLE_DAS.COL_D1	= VerifierNbrJour(nVarD1,90)
    					TABLE_DAS.COL_D2	= VerifierNbrJour(nVarD2,90)
    					TABLE_DAS.COL_D3	= VerifierNbrJour(nVarD3,90)
    					TABLE_DAS.COL_D4	= VerifierNbrJour(nVarD4,90)
    					TABLE_DAS.COL_Mnt1	= moVarMnt1
    					TABLE_DAS.COL_Mnt2	= moVarMnt2
    					TABLE_DAS.COL_Mnt3	= moVarMnt3
    					TABLE_DAS.COL_Mnt4	= moVarMnt4
    					TABLE_DAS.COL_MntAn	= moVarMntAn
    					//supprimer la ligne 2
    					TableSupprime(TABLE_DAS,IParcours)
    				SINON
    					//écrire dans la ligne 2	
    					TABLE_DAS.COL_D1[IParcours]		= VerifierNbrJour(nVarD1,90)
    					TABLE_DAS.COL_D2[IParcours]		= VerifierNbrJour(nVarD2,90)
    					TABLE_DAS.COL_D3[IParcours]		= VerifierNbrJour(nVarD3,90)
    					TABLE_DAS.COL_D4[IParcours]		= VerifierNbrJour(nVarD4,90)
    					TABLE_DAS.COL_Mnt1[IParcours]	= moVarMnt1
    					TABLE_DAS.COL_Mnt2[IParcours]	= moVarMnt2
    					TABLE_DAS.COL_Mnt3[IParcours]	= moVarMnt3
    					TABLE_DAS.COL_Mnt4[IParcours]	= moVarMnt4
    					TABLE_DAS.COL_MntAn[IParcours]	= moVarMntAn
    					//supprimer la ligne 1
    					TableSupprime(TABLE_DAS,nNumLigne)
    				FIN	
    		FIN
    		IParcours++
    	FIN
     
     
    	FIN
    FIN

  6. #6
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 057
    Points : 9 396
    Points
    9 396
    Par défaut
    Remplace cette ligne POUR TOUT LIGNE DE TABLE_DASpar POUR TOUT LIGNE DE TABLE_DAS DepuisFinPas sûr que ça suffise, parce que effectivement, ton code est un peu compliqué.
    Mais de toutes façons, l'idée est celle que donnait Voroltinquo : Quand on doit parcourir une table pour supprimer des lignes, c'est beaucoup plus facile si on lit la table à partir de la dernière ligne, plutôt qu'à partir de la première.

    Le bug que tu as, je crois que tous les développeurs l'ont eu, et qu'ils ont tous retenu la leçon : pour supprimer des doublons, on lit la table en commençant par la dernière ligne.

    Ceci dit, ton code paraît très long ... et il y a certainement un problème de conception/optimisation.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2019
    Messages : 43
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    Remplace cette ligne POUR TOUT LIGNE DE TABLE_DASpar POUR TOUT LIGNE DE TABLE_DAS DepuisFinPas sûr que ça suffise, parce que effectivement, ton code est un peu compliqué.
    Mais de toutes façons, l'idée est celle que donnait Voroltinquo : Quand on doit parcourir une table pour supprimer des lignes, c'est beaucoup plus facile si on lit la table à partir de la dernière ligne, plutôt qu'à partir de la première.

    Le bug que tu as, je crois que tous les développeurs l'ont eu, et qu'ils ont tous retenu la leçon : pour supprimer des doublons, on lit la table en commençant par la dernière ligne.

    Ceci dit, ton code paraît très long ... et il y a certainement un problème de conception/optimisation.
    DEPUISFIN N'est existe pas pour les champs

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2019
    Messages : 43
    Points : 6
    Points
    6
    Par défaut
    Problème résolu
    J'ai supprimer la table mémoire (Table_DAS) et j'ai créer une autre avec les mêmes nom de colonne

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

Discussions similaires

  1. [WD15] Affichage des donnes de fichier INI dans une table mémoire
    Par bestmoroco dans le forum WinDev
    Réponses: 7
    Dernier message: 17/10/2012, 20h15
  2. Réponses: 3
    Dernier message: 07/02/2006, 13h26
  3. [MySQL] Modifier une donnée dans une table
    Par leloup84 dans le forum PHP & Base de données
    Réponses: 27
    Dernier message: 02/02/2006, 13h25
  4. Inserer des données dans une table access SQL
    Par ouellet5 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 23/11/2005, 21h11
  5. Réponses: 2
    Dernier message: 15/06/2005, 17h32

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