PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Gros bug avec tableau dynamique
Gros bug avec tableau dynamique
Débuté par pierreavoye_no_spaam_, 17 déc. 2004 12:19 - 2 réponses
Posté le 17 décembre 2004 - 12:19
Bonjour, j'ai un gros problème avec un tabelau dynamique.

Avec une méthode (méthode1) d'un objet, je construit un tableau dynamique d'une structure contenant des chaîne(reference, designation, quantité, etc..):

resulta est un tableau dynamique de 0 UnePièce
je le redimensionne à chaque fois que je le rempli :
Dimension(resulta,Dimension(resulta)+1)

A la fin de ma fonction, je vérifie que le remplissage de mon tableau s'est bien déroulé... Tout va bien, j'ai 36 éléments avec les valeurs attendues (issues d'une requete sql sur une base externe)

Une méthode dans une autre classe (méthode2) appelle cette fonction afin de récupérer ce tableau.

Dimension me dit qu'il y a effectivement bien 36 éléments
Donc le passage en paramètre a l'air de fonctionner.

<i>Au débug, je me rend compte qu'il y a un gros problème :</i>
l'indice 1 du tableau dynamique récupéré en paramètre pointe sur le 36ème élement du tableau en sortie de méthode1...
Bien évidemment, le reste du tableau est peuplé de 0...


Question, je fais quoi ?

Merci !
Posté le 17 décembre 2004 - 12:41
Salut

>Question, je fais quoi ?

Tu pourrais commencer par donner plus de détails, un bout de code, parce que là on a pas grand chose.

Ciao
http://wdgotcha.atspace.com
Posté le 17 décembre 2004 - 13:28
L'appel

CetteAffaire:ConstruitArbrePourUnOF(ListeDesPièces:ExtraitPourUnOF_EtUnNiveau(1,1))


Les méthodes

PROCEDURE ExtraitPourUnOF_EtUnNiveau(nof,nniv)
//nof,nif entiers
i,cpttab est un entier
resulta est un tableau dynamique de 0 UnePièce


cpttab=1
POUR i=1 A :tailleTab
SI :liste[i]:numof = nof ET :liste[i]:niv=nniv ALORS
Dimension(resulta,Dimension(resulta)+1)
resulta[cpttab]=:liste[i]


FIN

FIN

RENVOYER resulta



PROCEDURE ConstruitArbrePourUnOF(ListePiècesPourOf)
i,maxi,cptNT est un entier
NonTraités est un tableau de 2048 entiers
ListeNonTraités est un tableau dynamique de 0 UnePièce
makelog est une chaîne

maxi = Dimension(ListePiècesPourOf)


POUR i=1 A maxi
makelog += ListePiècesPourOf[i]:ref
makelog += TAB + NumériqueVersChaine(ListePiècesPourOf[i]:id)
makelog += TAB + NumériqueVersChaine(ListePiècesPourOf[i]:previd)
makelog += RC

FIN
fSauveTexte("c:\bilans.log",makelog)

i=1
:ListeNomanclature[ListePiècesPourOf[i]:numof] = allouer un objet Noeud("Racine","Ref Racine",0,Vrai,0,-1)

POUR i =1 A maxi
SI ListePiècesPourOf[i]:id=ListePiècesPourOf[i]:previd ALORS


SI ListePiècesPourOf[i]:numof <>0 ALORS :ListeNomanclature[ListePiècesPourOf[i]:numof]:Constructeur(ListePiècesPourOf[i]:desi,ListePiècesPourOf[i]:ref,ListePiècesPourOf[i]:prix_ach,1,ListePiècesPourOf[i]:codecmpt,ListePiècesPourOf[i]:id)

SINON
SI ListePiècesPourOf[i]:numof <>0 ALORS
SI :ListeNomanclature[ListePiècesPourOf[i]:numof]:CréerSousid(ListePiècesPourOf[i]:previd,ListePiècesPourOf[i]:ref,ListePiècesPourOf[i]:prix_ach,ListePiècesPourOf[i]:Flag_Noeud_au_sens_arborescence_Of_piece,ListePiècesPourOf[i]:codecmpt,ListePiècesPourOf[i]:id) = Faux ALORS
cptNT++
NonTraités[cptNT]=i
FIN
FIN

FIN

FIN

Dimension(ListeNonTraités,cptNT)
POUR i=1 A cptNT
ListeNonTraités[i]=ListePiècesPourOf[NonTraités[i]]
FIN
:ConstruitArbrePourUnOF(ListeNonTraités);

voilà