Calculer total des colonnes d'un grid

vladocbm Messages postés 21 Date d'inscription mercredi 25 octobre 2006 Statut Membre Dernière intervention 19 avril 2008 - 25 mars 2008 à 15:15
vladocbm Messages postés 21 Date d'inscription mercredi 25 octobre 2006 Statut Membre Dernière intervention 19 avril 2008 - 8 avril 2008 à 10:20
bonjour tt le monde
j'en ai pas encore fini avec mes questions
alors mon souci cette fois ci est de calculer le total des valeures d'une colonne d'une DBGrid.
voila je crois qu'elle est claire ma question
merci pour vos reponses !

on est toujour entrain d'apprendre.

10 réponses

Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
1 avril 2008 à 22:26
Bonjour, je ne m'y connais pas très bien en DB composants, mais je pense que c'est à peu pres pareil que des compos normaux, sauf que les données viennent d'une base ...
Tu récupères chaque valeur de chaque cellule de chaque colonne dans une boucle For selon le nombre de cellules dans la colonne ! A toi de trouver le reste :)

Cordialement, Bacterius !

PS : je repete que je ne suis pas sur de ce que je dis mais tu peux toujours essayer !
0
vladocbm Messages postés 21 Date d'inscription mercredi 25 octobre 2006 Statut Membre Dernière intervention 19 avril 2008
2 avril 2008 à 09:33
merci pour la reponse, mais franchement je suis un vrai bleu et j'ai du mal a saisir ce que tu ma dis;
peut etre que ca serat sympat de m'expliquer un peut mieux (me faire un dessin par exemple)
ou bien si qlq'un peut contribuer avec son savoir ca serai sympat de votre part les amis.
merci encore.

on est toujour entrain d'apprendre.
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
5 avril 2008 à 19:57
Bonjour,
Tu voulais un exemple : 

Testé sur un grid normal uniquement :  voici un exemple pour compter la somme des valeurs d'une colonne.
D'abord on choisit la colonne et on la met dans une variable C (par exemple) ici on va prendre la colonne 3.




Légende : gras : mots clés
                bleu : types
                violet : variables
                rouge : ligne de code mise en évidence
                vert : commentaires



function CalculSomme(C: Integer): Integer; (permet d'adapter la fonction selon la colonne voulue)
Var
      I: Integer; // variable de contrôle d'une boucle For.
      Som: Integer; // On récoltera la somme provisoirement ici ;)
begin
        Som := 0; // On initialise la somme.
         for I : = 0 to MaGrid.Cols[C].Count - 1 do (on fixe la taille de la boucle)
        begin
                Som := Som + StrToInt(MaGrid.Cols[C].Strings[I]);
                end;
        Result : = Som;
end;


J'ai essayé de rendre le code le plus lisible possible ...
Alors on utilise une boucle for-do car on sait combien de fois la boucle va s'executer (autant de fois qu'il y a de cellules non vides dans la colonne). A chaque iteration de la boucle, on ajoute à la somme la valeur du contenu de la cellule de la colonne (a chaque iteration on passe a la cellule suivante). Le code en rouge c'est l'ajout des valeurs des cellules.
Ensuite on affecte au résultat de la fonction la somme de toutes les valeurs (soit Som). Et voila ! Bien sur il est possible de l'optimiser, en vérifiant si le contenu de la cellule est bien de type Integer, ... mais c'est a toi de chercher ^^

Remarque : il n'est pas nécessaire d'utiliser Som, on peut directement passer par Result, mais je me sens plus à l'aise avec une variable intermédiaire

Pour appeler la fonction et récuperer la valeur :
(On considère qu'il y a sur la fiche 1 tableau, 1 bouton, et 1 edit)
Quand on clique sur le bouton, on veut que l'édit contienne la somme des valeurs de la colonne 3 (par exemple) :
         Edit1.Text := IntToStr(CalculSomme(3));
Pour récuperer les valeurs de la colonne 12 : Edit1.Text := IntToStr(CalculSomme(12));
Pour récuperer les valeurs d'une colonne choisie par l'utilisateur dans un autre Edit : 
         Edit1.Text := IntToStr(CalculSomme(StrToInt(Edit2.Text));
(Il se declenchera une erreur si le contenu de Edit2 n'est pas un entier ... Mais si tu veux l'optimiser à toi de trouver :p
Si tu as d'autres questions appelle moi, je serai ravi de t'aider


Cordialement, Bacterius !
0
vladocbm Messages postés 21 Date d'inscription mercredi 25 octobre 2006 Statut Membre Dernière intervention 19 avril 2008
6 avril 2008 à 09:43
merci bacterius
c tres gentil de ta part , meme si je trouve que ton pseudo n'est pas a sa place il devra etre remedius par exemple ;
enfin bref !
ton exemple est tres clair , je vais l'appliquer et voir le resultat
marci encore l'ami.

on est toujour entrain d'apprendre.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
6 avril 2008 à 20:46
Bonjour,

Je te remercie Vladocbm, et dis moi toujours si le code que je te propose ne marche pas, j'ai peut être fait une erreur...
Quant au pseudo, tout le monde me le dit  mais il me plait
Quand tu as besoin d'aide sur quelque chose, Code Sources est la pour t'aider

Cordialement, Bacterius !
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
6 avril 2008 à 21:11
Au fait n'oublie pas de cliquer sur réponse acceptée quand tu as trouvé la solution à ton problème

Cordialement, Bacterius !
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
6 avril 2008 à 21:16
J'ai testé ma source il y a un léger problème. Dans la ligne en rouge, il faut vérifier si la cellule est vide. Il suffit de faire :

if MaGrid.Cols[C].Strings[I] <> '' then Som := Som + StrToInt(MaGrid.Cols[C].Strings[I]);

Car le stringgrid ne le fait pas automatiquement comme je le pensais.

Cordialement, Bacterius !

PS : c'est ici qu'il faut placer le code de test (pour savoir si le contenu est bien un entier, pour ne pas déclencher d'erreur) !
0
vladocbm Messages postés 21 Date d'inscription mercredi 25 octobre 2006 Statut Membre Dernière intervention 19 avril 2008
7 avril 2008 à 10:24
bonjour bacterius

merci pour tout , c tres sympat de ta part il me reste qu'a tester le code
merci encore.
au fait , je vais poster encore une autre question , mais pas ici, pour ne pas melanger les sujets . mais je vais te dire de quoi il s'agit
depuis que j'ai commancé a apprenre delphi, je developper mes petits codes qu'avec les table paradox, alors je voudrai me mettre sur une autre , mais je ne sais pas comment choisir, meme si j'opte pour les tables sql.
je voudrai savoir ton avis.
et comment eviter de refaire tout un programme fait avec paradox pour le rendre sous une autre BD.
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
7 avril 2008 à 19:21
Bonjour,
je te réponds rapidement et honnêtement ici, je n'y connais rien (mais absolument rien) en base de données. D'une facon générale, les onglets concernant les bases de données dans ma palette des composants n'ont jamais été cliqués ...
Et j'ai testé le code chez moi, j'ai peur qu'il ne convienne pas pour un DbGrid, mais il est peut etre adaptable ...
Demande plutôt à quelqu'un qui connait quelques notions de bdd ...
Désolé de pas pouvoir t'aider

Cordialement, Bacterius !
0
vladocbm Messages postés 21 Date d'inscription mercredi 25 octobre 2006 Statut Membre Dernière intervention 19 avril 2008
8 avril 2008 à 10:20
bonjour bacterius (remedius)

j'ai pas encore tester ton code faute de temps (surcharge de travail), mais je crois que ca va marcher , l'esentiel que j'ai pigé l'astuce.
et pour l'autre question, j'attedrai les reponce des specialistes , et merci encore pour ton aide et ta franchise majustieuse.

a bien tot mon ami

on est toujour entrain d'apprendre.
0
Rejoignez-nous