PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → classe - structure - tableau dynamique
classe - structure - tableau dynamique
Débuté par p.maunas, 27 juil. 2004 19:38 - 3 réponses
Posté le 27 juillet 2004 - 19:38
J'ai l'erreur suivante dans une classe au 2ème appel de
cclient:Initialiser()
Erreur n°2304 : La dimension 1 du tableau possède 1 élément(s) et vous tentez
d'accéder à l'élément 2.

il ne me redimensionne pas le tableau de structure, j'ai l'impression...

il y a certainement un loup quelque part mais où ??
Merci d'avance pour votre aide !


st_edition est une structure
idTypeEdition est un entier
DetailEdition est un tableau dynamique
FIN



cclient est une classe
IdClient est un entier
CodeClient est une chaine
ListeEdition est un tableau dynamique

***
Méthode de la classe
***
Initialiser(LOCAL ai_idtypeEdition is a int)
LOCAL
li_dimension, li_nb est un entier

IF :ListeEdition = Null ALORS
:ListeEdition = allouer un tableau dynamique de 1 st_edition
li_dimension = 1
SINON
li_dimension = Dimension(:ListeEdition)+1
Dimension(:ListeEdition,li_dimension)
FIN


ls_sqlexec = "P_CLIENT_EDITION_SC @ai_idtypedition="+ NumToString(ai_idtypedition)+
""
IF NOT SQLExec(ls_sqlexec, "REQ_PRINT") THEN
SQLInfo("REQ_PRINT")
SQLClose("REQ_PRINT")
RESULT -1
END

:ListeEdition[(li_dimension)]:idTypeEdition = ai_idtypeEdition

li_nb = 0
TANTQUE SQLFetch("REQ_PRINT") = 0
li_nb++
:ma_Edition[(li_dimension)]:DetailEdition = allouer un tableau dynamique
de 1 par 3 string
:ma_Edition[(li_dimension)]:DetailEdition[(li_nb),1] = NumToString(SQLGetCol("REQ_PRINT",
2))
:ma_Edition[(li_dimension)]:DetailEdition[(li_nb),2] = SQLGetCol("REQ_PRINT",
3)
:ma_Edition[(li_dimension)]:DetailEdition[(li_nb),3] = SQLGetCol("REQ_PRINT",
5)
FIN
SQLClose("REQ_PRINT")
Posté le 27 juillet 2004 - 20:04
"Patricia M." <p.maunas@procam.fr> wrote:


J'ai l'erreur suivante dans une classe au 2ème appel de
cclient:Initialiser()
Erreur n°2304 : La dimension 1 du tableau possède 1 élément(s) et vous tentez
d'accéder à l'élément 2.

il ne me redimensionne pas le tableau de structure, j'ai l'impression...

il y a certainement un loup quelque part mais où ??
Merci d'avance pour votre aide !


st_edition est une structure
idTypeEdition est un entier
DetailEdition est un tableau dynamique
FIN



cclient est une classe
IdClient est un entier
CodeClient est une chaine
ListeEdition est un tableau dynamique

***
Méthode de la classe
***
Initialiser(LOCAL ai_idtypeEdition is a int)
LOCAL
li_dimension, li_nb est un entier

IF :ListeEdition = Null ALORS
:ListeEdition = allouer un tableau dynamique de 1 st_edition
li_dimension = 1
SINON
li_dimension = Dimension(:ListeEdition)+1
Dimension(:ListeEdition,li_dimension)
FIN


ls_sqlexec = "P_CLIENT_EDITION_SC @ai_idtypedition="+ NumToString(ai_idtypedition)+
""
IF NOT SQLExec(ls_sqlexec, "REQ_PRINT") THEN
SQLInfo("REQ_PRINT")
SQLClose("REQ_PRINT")
RESULT -1
END

:ListeEdition[(li_dimension)]:idTypeEdition = ai_idtypeEdition

li_nb = 0
TANTQUE SQLFetch("REQ_PRINT") = 0
li_nb++
:ma_Edition[(li_dimension)]:DetailEdition = allouer un tableau dynamique
de 1 par 3 string
:ma_Edition[(li_dimension)]:DetailEdition[(li_nb),1] = NumToString(SQLGetCol("REQ_PRINT",
2))
:ma_Edition[(li_dimension)]:DetailEdition[(li_nb),2] = SQLGetCol("REQ_PRINT",
3)
:ma_Edition[(li_dimension)]:DetailEdition[(li_nb),3] = SQLGetCol("REQ_PRINT",
5)
FIN
SQLClose("REQ_PRINT")

Reponse :
est tu bien sûr que lors du deuxième appel, le programme rentre bien dans
le sinon du :
>IF :ListeEdition = Null ALORS
Si ce n'est pas le cas, utilise plutôt :
IF Dimension(:ListeEdition)=0 ALORS

.. Dans tout les cas, tu peut suivre l'execution au débeugeur et vérifier
avant l'accès au tableau que sa taille correspond.
J'espère que ces quelques pistes pouront t'aider

Bon courage.
Posté le 27 juillet 2004 - 20:10
il rentre bien dans le 'sinon' et exécute la ligne 'Dimension' mais si j'interroge
la dimension par le débuggeur, elle n'a pas changé !!!
Posté le 28 juillet 2004 - 15:43
Je ne crois pas que tu puisses affecter des structures dans un tableau. De
plus, la structure st_edition est composé d'un tableau, il est interdit d'affecter
un tableau dans un autre tableau. Voir l'aide en ligne sur les tableaux,
section Limites.
A mon avis, ton problème vient de là.
A plus