Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
slt à ts,
voici mon petit souci:
je besoin de parcourir une table afin de faire des sommations sur un champ montant pr une période donnée.
j'ai une datawindow qui fait un select pr tous les enregistrements de la période.
maintenant ds le code, j'ai créé une datastore comme suit:
datastore ds_fact
ds_fact = create datastore
ds_fact.dataobject ='dw_fact'
ds_fact.settransobject(sqlca)
ds_fact.retrieve()
ll_rows=ds_fact.rowcount()
messagebox("rows",string(ll_rows))
notez que la datawindow dw_fact contient les enregistrements tant disque la datastore ne récupère rien ll_rows=0.
avant de faire ma boucle pr calculer le montant total de la période j'aimerais savoir combien de lignes j'ai ds ma datastore.
svp j'ai besoin de votre aide
merci
Hors ligne
Bonjour,
Il y a une solution plus élégante et surtout plus rapide à ton probléme.
Il te suffit d'ajouter un computed field dans ta dawindow réalisant la somme sur la colonne désirée (sum(mycolonne)) et de récupérer la valeur par un GetItemDecimal par exemple.
Par contre, je ne vois pas d'anomalies particulières à ton code, tu devrais récupérer le nombre de lignes. L'erreur la plus classique est une faute de syntaxe dans le nom du dataobject.
Tu devrais tester les valeurs retours de SetTransObject et Retrieve pour voir si tu n'as pas un retour -1.
Hors ligne
settransobject me renvoi bel et bien 1
aussi, je voulais par là utiliser une datastore pcq j'aurais bcp à faire le cumul du montant est un cas.
comment savoir si j'ai omis un truc ou pas?
merci buck
Hors ligne
le code retour du retrieve te donne directement le nombre de lignes récupérées si çà marche (pas besoin donc de faire un rowcount juste après). Sinon, çà retourne -1.
F1 a écrit:
Returns the number of rows displayed (that is, rows in the primary buffer) if it succeeds and -1 if it fails. If there is no DataWindow object assigned to the DataWindow control or DataStore, this method returns -1.
This method always returns -1 if the data source is external. Use a method such as ImportFile to populate the DataWindow.
Vérifie déjà ton code retour, et si c'est -1, tu as ici deux pistes de recherche.
Dernière modification par abdelta (30-04-2010 12:54:03)
Hors ligne
Bonjour,
Nous sommes un forum d'entraide entre utilisateur, notre temps est précieux. Peux-tu faire un minimum d'effort dans la rédaction :
aussi, je voulais par là utiliser une datastore pcq j'aurais bcp à faire le cumul du montant est un cas.
Je ne sais pas si d'autres on compris ce que tu voulais dire . On aimerait éviter en plus de faire du décryptage.
Hors ligne
je voulais dire par là que je préfère utiliser une datastore
mis à part le cumul du montant, je vais faire d'autres opérations de calculs dans le code
abdelta, j'ai vérifié le retour de settransobject c'est 1 mais ce n'est pas le nombre d'enregistrements contenus ds le dw_fact.
que faire encore?
Hors ligne
omelia a écrit:
abdelta, j'ai vérifié le retour de settransobject c'est 1 mais ce n'est pas le nombre d'enregistrements contenus ds le dw_fact.
que faire encore?
Sauf erreur de ma part Abdelta parle bien du Retrieve() (chargement de la DW) et non du SetTransObject() (affectation d'un objet transaction)
Hors ligne
long ll_ret
ll_ret = ds_fact.Retrieve()
ll_ret > 0 Nombre de ligne récupérées
ll_ret < 0 Erreur
Quelle est ta valeur de ll_ret ?
Hors ligne
Bonjour Omelia,
Est-ce que ta variable de retour n'est pas de type Integer?
Si c'est le cas, peut être que ton nombre de ligne est supérieur à 32767. Dans ce cas, passe ta variable en Long
Hors ligne
Pour des raisons de lisibilité, merci également de
Hors ligne