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






Bonjour à tous,
J'ai un problème que je suis pas arrivé à résoudre...
dans une fenêtre j'ai une datawindow de sélection, je saisi des critères de sélection, ensuite je les récupère.
On peut avoir plusieurs critères dans un seul champ. et ici le problème...
le besoin maintenant c'est je voulais savoir combien de variable dans ma datastore.
je fais comme suit mais toujours ll_find = -5, malgré j'ai des lignes.
Exemple :
dans les critères de sélection j'ai : ls_xxx = A, B, C, T, K
datastore : champ1 champ2
ligne 1 A 6
ligne 2 B 1
ligne 3 A 3
ligne 4 A 4
ligne 5 C 0
==> le résultat doit être ll_find = 3
ll_find = ids_mydatastore.find ("champ = '" + ls_xxx + "'", 1, ids_mydatastore.RowCount())
j'ai bien ids_mydatastore.RowCount() = 5
Merci et bonne journée
Dernière modification par mattdamon (23-09-2008 10:40:49)
Hors ligne














un compute directement dans la DWO : Count(champ1 for all distinct)
Hors ligne








erasorz
Matt, le find ne fonctionne pas comme ça.
Find te renvoie la première ligne qui vérifie un critère
ls_xxx = "B" ll_find = ids_mydatastore.find ("champ1 = '" + ls_xxx + "'", 1, ids_mydatastore.RowCount())
Renvoie 2
Sinon, tu peux faire un filtre avec : champs1 in ('A', 'B', 'C', 'T,' 'K')
puis rowcount
Hors ligne






Bonjour,
Juste pour clarifier, la méthode find permet de trouver un indice de ligne de la datawindow ou datastore selon le critère défini et non un nombre de lignes correspondant au critère.
Pour ll_find = -5 (Bad argument)
ls_xxx = "'A' or 'B' or 'C' or 'T' or 'K' ll_find = ids_mydatastore.find ("champ1 = " + ls_xxx + ", 1, ids_mydatastore.RowCount())
Pour ton exemple, ll_find = 1
Pour résoudre ton problème avec la méthode ll_find :
integer li_i, li_count long ll_find string ls_array[] = {'A','B','C','T','K'} FOR li_i = 1 TO UpperBound(ls_array) ll_find = ids_mydatastore("champ1='" + ls_array[li_i] + "'", 1, ids_mydatastore.RowCount()) IF ll_find > 0 THEN li_count++ NEXT
Normalement, li_count = 3
La méthode d'erasorz est la plus efficace pour ton cas.
Désolé redondance, il semble que nous étions deux à rédiger la même remarque
Hors ligne








buck a écrit:
Désolé redondance, il semble que nous étions deux à rédiger la même remarque
Bonjour Buck, il vaut mieux ça que l'inverse
Merci pour ton intervention
Hors ligne










tu peux utiliser evaluate
http://pbadonf.fr/forum/viewtopic.php?id=57
Hors ligne






Je vous remercie pour vos réponses j'ai utilisé en fait, la solution de erasorz :
erasorz
erasorz a écrit:
un compute directement dans la DWO : Count(champ1 for all distinct)
Hors ligne