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 :

Ajout dans un tableau [WD18]


Sujet :

WinDev

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Mai 2014
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Ajout dans un tableau
    Bonjour, je vous expose mon problème, je connais les fonctions 'Ajoute' et 'TableauAjoute'. J'ai voulut utiliser l'une ou l'autre de ces fonctions dans mon code.
    J'ajoute un élément à mon tableau, cela fonctionne parfaitement, puis lorsque j'ajoute un second élément à ce même tableau, tous les éléments dudit tableau sont remplacé par le second élément. Et c'est la même chose pour le troisième, quatrième élément, et ainsi de suite.

    Voici le code qui me pose problème (Il y a beaucoup d'autre code derrière) :
    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
    // On va charger tous les contrôles d'un lot dans l'attribut 'sesControles'
    tabIdControles est un tableau d'entiers
    tabLotsMachines est un tableau d'entiers
    unControle est un Contrôle
    tabLotsMachines = recupLotMachine(leLot.p_ID)
    POUR TOUT nLotMachine DE tabLotsMachines
    	tabIdControles = chargerIdControle(nLotMachine)
    	POUR TOUT nIDControle DE tabIdControles
    		unControle = chargerChaqueControle(nIDControle)
    		Info(unControle.p_pesée)
    		Ajoute(leLot.p_sesControles,unControle)
    		POUR TOUT PPunControle DE leLot.p_sesControles
    			Info("Dans mes contrôles : " + PPunControle.p_pesée)
    		FIN
    	FIN
    FIN
    Lorsque je fais Info(unControle.p_pesée), j'ai bien le contrôle demandé. mais quand j'affiche les contrôles de leLot.p_sesControles, tous les contrôles sont écrasés par le dernier contrôle ajouté.

    Je viens vous demander de l'aide car je ne trouve pas la solution.
    Bonne journée, Neloe

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Visiblement p_sesControles est une propriété de leLot.
    Peut-on avoir le code de p_sesControles ?
    Si tu mets un point d'arrêt sur la ligne 6, et que tu traces le code pas à pas, tu auras peut-être un début de piste.

    Tatayo.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Mai 2014
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Voici la déclaration de sesControles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sesControles est un tableau de 0 objet Contrôle dynamique
    Et voila le getter et setter de sesControles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //Récupération de la propriété p_sesControles
    PROCEDURE p_sesControles()
     
    RENVOYER sesControles
     
    //Affectation de la propriété p_sesControles
    PROCEDURE p_sesControles(Valeur est un objet dynamique)
     
    sesControles=Valeur
    Pour le point d'arrêt :
    - tabLotsMachines est un tableau de 4 entiers
    - nLotMachine me donne la bonne valeur
    - tabIdControles renvoit bien mes contrôles
    - Je récupère bien le contrôle désiré
    i.e. toute ma chaîne de récupération est correcte

    Quand je parcours les contrôles de leLot.p_sesControles, j'ai <valeur de retour non évaluable>
    Le problème est peut-être ici...

    Voila le lot...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Lot> ID=1 codeProduit=1131006 numeroLot="4120IA" numeroDossier=22006 libellé="FD INFU DIGESTION LEGERE 20S" DLUO=20991231 masseBrute=0 masseNette=30 TU1=0 TU2=0 Type= QteAcceptee=5000 tare=34.6 sigma=1.5 moyenneControles=0 dateCloture=20140509
    Et mon contrôle (numéro 2):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Contrôle> pesée=62.4 dureté=0 paramétrage=Faux heure=20140509112600000 moyenne=6.2 numéro=21

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Voilà d'où vient le problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //Récupération de la propriété p_sesControles
    PROCEDURE p_sesControles()
    
    RENVOYER sesControles
    
    //Affectation de la propriété p_sesControles
    PROCEDURE p_sesControles(Valeur est un objet dynamique)
    
    sesControles=Valeur
    sesControles est un tableau, donc la partie "écriture" de p_sesControles doit prendre en paramètre un tableau, et non une instance de classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    PROCEDURE p_sesControles(Valeur est un tableau dynamique)
     
    tableaucopie(Valeur,sesControles)
    Tatayo.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Mai 2014
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Je viens de changer, mais toujours le même problème. Et idem si je met :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PROCEDURE p_sesControles(Valeur est un tableau de Contrôle dynamique)
     
    TableauCopie(Valeur,sesControles)
    Ce qui m'étonne, c'est que l'ajout se fait correctement mais qu'en plus, il écrase les autres cases du tableau...

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Et en utilisant des objets dynamiques ? Parce que visiblement tout ce passe comme si toutes les "cases" du tableau référençaient la même instance de la classe Contrôle.
    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
     
    // On va charger tous les contrôles d'un lot dans l'attribut 'sesControles'
    tabIdControles est un tableau d'entiers
    tabLotsMachines est un tableau d'entiers
    unControle est un Contrôle dynamique
    tabLotsMachines = recupLotMachine(leLot.p_ID)
    POUR TOUT nLotMachine DE tabLotsMachines
    	tabIdControles = chargerIdControle(nLotMachine)
    	POUR TOUT nIDControle DE tabIdControles
    		unControle = allouer un Contrôle
    		unControle = chargerChaqueControle(nIDControle)
    		Info(unControle.p_pesée)
    		Ajoute(leLot.p_sesControles,unControle)
    		POUR TOUT PPunControle DE leLot.p_sesControles
    			Info("Dans mes contrôles : " + PPunControle.p_pesée)
    		FIN
    	FIN
    FIN
    Il faut bien sûr modifier la déclaration de sesControles, pour que ce soit un tableau de Contrôles dynamiques.

    Tatayo.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Mai 2014
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    sesControles était déja correctement déclaré.

    Ça fonctionne, merci beaucoup, vraiment =)


    Voici le code final pour ceux qui auraient le mêm problème :
    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
    // On va charger tous les contrôles d'un lot dans l'attribut 'sesControles'
    tabIdControles est un tableau d'entiers
    tabLotsMachines est un tableau d'entiers
    unControle est un Contrôle dynamique
    tabLotsMachines = recupLotMachine(leLot.p_ID)
    POUR TOUT nLotMachine DE tabLotsMachines
    	tabIdControles = chargerIdControle(nLotMachine)
    	POUR TOUT nIDControle DE tabIdControles
    		unControle = allouer un Contrôle
    		unControle = chargerChaqueControle(nIDControle)
    		Info(unControle.p_pesée)
    		Ajoute(leLot.p_sesControles,unControle)
    		POUR TOUT PPunControle DE leLot.p_sesControles
    			Info("Dans mes contrôles : " + PPunControle.p_pesée)
    		FIN
    	FIN
    FIN
    Et la déclaration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    sesControles est un tableau de 0 objet Contrôle dynamique
     
    //Récupération
    PROCEDURE p_sesControles()
     
    RENVOYER sesControles
     
    //Affectation
    PROCEDURE p_sesControles(Valeur est un tableau de Contrôle dynamique)
     
    TableauCopie(Valeur,sesControles)

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

Discussions similaires

  1. Ajouter dans un tableau déja existant
    Par afrodje dans le forum Langage
    Réponses: 1
    Dernier message: 29/05/2008, 12h15
  2. Style d'une cellule ajoutée dans un tableau
    Par nicoaix dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 25/04/2008, 16h47
  3. ajout dans un tableau de session
    Par artotal dans le forum Langage
    Réponses: 4
    Dernier message: 17/04/2008, 23h24
  4. Réponses: 2
    Dernier message: 21/05/2007, 18h55
  5. [C#] Ajouter dans un tableau d'objet
    Par thomfort dans le forum Windows Forms
    Réponses: 16
    Dernier message: 14/11/2006, 08h56

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