Pas d'inquiétude, avec PBAdonf, c'est dans la poche ! ^^

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 23-01-2009 17:06:41

Kyoshiro  
Membre Geek
Lieu: Montpellier
Date d'inscription: 24-11-2008
Messages: 59
Pépites: 52
Banque: 0

Nombre de lignes à afficher dans une DataWindow ou un DataChildItem

Bonjour,

Dans mon appli PowerBuilder, il m'arrive parfois que l'affichage d'une datawindow ou le rechargement d'un datachilditem plante, sans aucun message d'erreur.

Le seul point commun entre les deux erreurs est que dans les deux cas, on retrieve plus de 1000 éléments.

D'ou ma question : y'a t'il une limite technique du nombre d'éléments que ces deux composants peuvent afficher, et si oui laquelle? (1000??)

Mais le plus étonnant, c'est que meme si c'est le cas, comment ca se fait que mon datachilditem ne plante pas à l'affichage, malgré son trés grand nombre d'éléments, mais plante lors de son rechargement?? xD

Merci pour votre aide !!


Saying Java is good because it works on all operating systems is like saying anal sex is good because it works on all genders.

Hors ligne

 

#2 24-01-2009 10:05:45

buck  
Modérateur
Lieu: Dijon
Date d'inscription: 31-07-2008
Messages: 747
Pépites: 1,028,843
Banque: 171,170,849,654

Re: Nombre de lignes à afficher dans une DataWindow ou un DataChildItem

Bonjour,

Il est très difficile de de répondre avec si peu de détails. Je gère des tables avec plusieurs millions de lignes sans aucun problème.

- Base de données ?
- Version de Powerbuilder ?
- Qu'appelles-tu plantages ? Retrieve = -1 sur le child ? retrievials arguments erronées (Retrieve = 0) ... ?
- Peux tu nous mettre un extrait de ton code ?

Hors ligne

 

#3 26-01-2009 09:03:49

Kyoshiro  
Membre Geek
Lieu: Montpellier
Date d'inscription: 24-11-2008
Messages: 59
Pépites: 52
Banque: 0

Re: Nombre de lignes à afficher dans une DataWindow ou un DataChildItem

Bonjour,

La version de ma base de données est Oracle 10g et l'application est en PB 10.5.1.

En fait, en ce qui concerne le plantage sur le DataChildItem, le TreeView gere 4 niveaux :
- la racine de l'arborescence (1 item)
- des entités (20 items)
- des responsables d'entités (environ 10 responsables par entité)
- les employés des responsables (entre 100 et 1000 employé par responsable)

Le premier affichage tout se passe bien. Par contre, quand j'ajoute un élément à une entité ayant plus de 1000 éléments (responsables et employés confondus), je rafraichis le TreeView aprés l'ajout. Ce rechargement se fait via une fonction récursive (qui stocke les indices des handles dans un tableau)... puis quand j'arrive au 1001eme élément de mon DataChildItem, j'ai une exception "Array Boundary exceeded".

Donc OK, je suis sorti des limites du tableau mais pourquoi systématiquement aprés le 1000eme élément?


Saying Java is good because it works on all operating systems is like saying anal sex is good because it works on all genders.

Hors ligne

 

#4 26-01-2009 09:14:28

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Nombre de lignes à afficher dans une DataWindow ou un DataChildItem

as-tu déclaré ton tableau de handles en tab[1000] ?


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#5 26-01-2009 09:22:22

Kyoshiro  
Membre Geek
Lieu: Montpellier
Date d'inscription: 24-11-2008
Messages: 59
Pépites: 52
Banque: 0

Re: Nombre de lignes à afficher dans une DataWindow ou un DataChildItem

Pas dans ma déclaration initiale en tout cas... mais je pense que ca vient effectivement de la, car quand je me mets en mode debug, à l'init mon tableau n'a aucun indice de précisé, puis une fois que quelques fonctions sont passées, il a une taille fixe tab[1000]... j'avoue que j'avais pas pensé que mon tableau pourrait passer de taille variable à taille fixe...

Mais dans ce cas, en admettant que je trouve ou l'initialisation du tableau se fait à 1000 éléments, comment s'écrit la déclaration d'un tableau à deux dimensions de taille variable? tab[,] ??


Saying Java is good because it works on all operating systems is like saying anal sex is good because it works on all genders.

Hors ligne

 

#6 26-01-2009 09:27:51

Kyoshiro  
Membre Geek
Lieu: Montpellier
Date d'inscription: 24-11-2008
Messages: 59
Pépites: 52
Banque: 0

Re: Nombre de lignes à afficher dans une DataWindow ou un DataChildItem

Bon aprés avoir revu un peu la doc la dessus, il est bien précisé que "Only one-dimensional arrays can be variable-size arrays".

Donc ca voudrait en gros dire, que je serais obligé de spécifier une valeur assez grande pour mon indice pour celui ci ne soit "jamais" atteint? n'y a t'il pas moyen de faire quelque chose de plus adaptable? (sachant que dans la fonction de rafraichissement, je n'ai aucun moyen de savoir le nombre d'item à rafraichir)


Saying Java is good because it works on all operating systems is like saying anal sex is good because it works on all genders.

Hors ligne

 

#7 26-01-2009 09:34:16

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Nombre de lignes à afficher dans une DataWindow ou un DataChildItem

tu peux contourner cela en utilisant un tableau à taille variable de structures contenant un tableau à taille variable :

Code: pb

// déclaration structure
global type s_tableau from structure
 long dimension2[]
end type

// déclaration tableau
s_tableau lstr_tab[]

// affectation
lstr_tab[i].dimension2[j] = k


cela dit c'est étrange qu'un tableau à taille variable se transforme en tab[1000]


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#8 26-01-2009 09:37:07

Kyoshiro  
Membre Geek
Lieu: Montpellier
Date d'inscription: 24-11-2008
Messages: 59
Pépites: 52
Banque: 0

Re: Nombre de lignes à afficher dans une DataWindow ou un DataChildItem

N'est ce pas?

Je vais chercher dans cette voie en tout cas, merci beaucoup pour votre aide !

Etant donné que j'ai eu un probleme de ce genre sur une DataWindow, est ce que je peux en déduire également que l'affichage des lignes de ma DataWindow est fonctionnellement limité à 1000, à cause d'un probleme du meme genre?


Saying Java is good because it works on all operating systems is like saying anal sex is good because it works on all genders.

Hors ligne

 

#9 26-01-2009 14:28:24

Kyoshiro  
Membre Geek
Lieu: Montpellier
Date d'inscription: 24-11-2008
Messages: 59
Pépites: 52
Banque: 0

Re: Nombre de lignes à afficher dans une DataWindow ou un DataChildItem

Rebonjour,

Je pense que ça n'a plus grand chose à voir mais, après avoir augmenté la taille de mon tableau, je me suis heurté à un autre probleme. Quand j'insère mon élément dans le TreeView avec la méthode InsertItemLast(), je fais un Sort() sur toute la branche de mon TreeView à laquelle j'ajoute l'élément...
Si cet élément doit se situer en début de liste (élément commençant par un 'a') alors que je l'ai inséré à la fin de la liste, le programme remonte les nœuds un par un en partant de la fin pour trouver l'endroit ou placer le nouvel élément...

Cependant, au bout d'un certain nombre d'appels à ma fonction de tri, l'application se ferme toute seule, sans aucun message d'erreur !

Une idée sur ce qu'il se passe?


Saying Java is good because it works on all operating systems is like saying anal sex is good because it works on all genders.

Hors ligne

 

#10 26-01-2009 15:32:16

buck  
Modérateur
Lieu: Dijon
Date d'inscription: 31-07-2008
Messages: 747
Pépites: 1,028,843
Banque: 171,170,849,654

Re: Nombre de lignes à afficher dans une DataWindow ou un DataChildItem

Bonjour,

Pour faire une synthèse, les tableaux dans Powerbuilder se dimensionne effectivement dynamiquement si tu les déclares de la façon suivante :

Code: PB

integer li_size
string ls_data[]
string ls_get

ls_data[1] = 'laurent'
ls_data[2] = 'jacques'
ls_data[1000] = 'vincent'

li_size = UpperBound(ls_data) //=> 1000
ls_get = ls_data[1500] // => Array Boundary exceeded


La taille de ton tableau est déterminé par l'indice le plus élevé que tu utilises lorsque tu initialises le tableau.


Cependant, au bout d'un certain nombre d'appels à ma fonction de tri, l'application se ferme toute seule, sans aucun message d'erreur !

Je ne suis pas surpris. Tu travailles je suppose comme tu l'as dit avec des tableaux de dimensions conséquentes que tu passes en arguments de méthodes.

Il faut préciser à tes méthodes de passer le tableau par référence sinon tu crées en mémoire une nouvelle copie du tableau et tu accrois l'occupation mémoire de ton application de façon constante.
Le "garbage collector" ramasse miette est connu pour ne pas bien remplir son rôle dans ce cas. La mémoire occupée par la copie du tableau en sortie de méthode n'est pas correctement libérée.

Tu peux essayer de suivre l'occupation mémoire de ton application à partir du gestionnaire de tâche de windows.

Hors ligne

 

#11 27-01-2009 18:27:09

Chrnico  
N2I Power
Award: bf
Lieu: Vanves
Date d'inscription: 05-06-2007
Messages: 1206
Pépites: 12,884,901,943
Banque: 9,223,372,036,854,776,000
Site web

Re: Nombre de lignes à afficher dans une DataWindow ou un DataChildItem

J'ai lu rapidement le topic en diagonale . J'ai juste une petite remarque, n'oubliez pas que la Datawindow de type External utilisée dans une datastore peut être un excellent moyen de stocker de la donnée en mémoire à la place d'un tableau à n dimensions maintenant que nous avons des machines suffisamment puissante pour ne pas être à quelques Ko prêt.

Une DW de ayant trois colonnes dim1, dim2 et dim3 peut permettre de gérer 3 dimensions.

Dim1    Dim2    Dim3
a1        b1        c1
a1        b1        c2
a1        b2        c3
a1        b2        c4
a2        b3        c5
etc...

Et l'avantage est que l'on peut utiliser les méthodes des DW pour manipuler les données : find, sort, filter, delete, setitem, getitem, rowcount(), etc.


Tu dois donc tu peux (Kant)

Tu peux donc tu dois (N2i)
www.n2i.fr

Hors ligne

 

#12 27-01-2009 18:45:27

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Nombre de lignes à afficher dans une DataWindow ou un DataChildItem

Chrnico a écrit:

Une DW de ayant trois colonnes dim1, dim2 et dim3 peut permettre de gérer 3 dimensions.

Dim1    Dim2    Dim3
a1        b1        c1
a1        b1        c2
a1        b2        c3
a1        b2        c4
a2        b3        c5

pour l'utilisation d'un dwo/ds, qui permet en plus d'utiliser des indices autres que des entiers (réels, chaines...)
en revanche pour gérer 3 dimensions, il faut 4 colonnes, 3 pour les dimensions et une pour la valeur :

Dim1    Dim2    Dim3   Valeur
a1        b1        c1        x1
a1        b1        c2        x2
a1        b2        c3        x3
a1        b2        c4        x4
a2        b3        c5        x5

ce qui équivaut à :

Matrice[a1,b1,c1]=x1
Matrice[a1,b1,c2]=x2
etc


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#13 04-02-2009 11:36:56

Pilou007  
Membre Geek
Lieu: Bordeaux
Date d'inscription: 01-02-2007
Messages: 69
Pépites: 313
Banque: 0

Re: Nombre de lignes à afficher dans une DataWindow ou un DataChildItem

Salut
C'est ce que j'utilise à la place des tableaux multidimensionnel... On peut très bien utiliser l'indice de la ligne et l'indice de la colonne cela évite d'ajouter une 4ème colonne, non??

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22