IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Stocker des valeurs temporairement , les trier pour les afficher clasée


Sujet :

C++Builder

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Points : 146
    Points
    146
    Par défaut Stocker des valeurs temporairement , les trier pour les afficher clasée
    Bonjour a tous.

    Voila j'ai encore un petit soucis

    Je veux faires des statistique de ma table "historique".
    j'aimerais qu'il m'affiche le produit le plus vendu.
    Donc j'avais dans l'idée de prendre la reference du produit ainsi que la quantité , de faire un update de la quantité qd il retrouve la meme référence du produit. Cette partie est codée et marche

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    SQLQuery1->Active=false;
    SQLQuery1->SQL->Clear();
    AnsiString sql("SELECT * FROM historique");
    SQLQuery1->SQL->Add(sql);
    SQLQuery1->Open();
    int Resultat= SQLQuery1->RecordCount;
     
    		if (Resultat>0)  // Si Resultat est > 0 alors c'est quil y a au moins une reference
    		{
    			//ShowMessage("il existe un panier pour cette date");
    			ListView1->Items->Clear();
     
    			for (int i = 0; i < Resultat; i++)
    			{
    			int prodentree = 0;
    				// récupération des données
    				//SQLQuery1->Active=true;
    				AnsiString quantite = SQLQuery1->FieldValues["Quantite"];
    				AnsiString referenceproduit = SQLQuery1->FieldValues["RefProduit"];
    				AnsiString type = SQLQuery1->FieldValues["Type"];
    				AnsiString marque = SQLQuery1->FieldValues["Marque"];
    				AnsiString model = SQLQuery1->FieldValues["Model"];
    				// fin récupération des données
    				for (int i = 0; i < ListView1->Items->Count; i++)  // checker tt les items du panier
    				{
    					 AnsiString refpanier = ListView1->Items->Item[i]->SubItems->Strings[0];
     
    					 if (refpanier == referenceproduit) // si la reference panier est deja dedans
    					 {
     
    						// update quantité
    						AnsiString quantitepanier = ListView1->Items->Item[i]->Caption;
    						double quantitetotal = quantitepanier.ToDouble() + quantite.ToDouble();
    						AnsiString quantitefinal(quantitetotal);
    						ListView1->Items->Item[i]->Caption = quantitefinal;
    						prodentree = 1;
    						SQLQuery1->Next();
    					 }
    				}
    				if (prodentree == 0)
    				{
    					TListItem *Item = ListView1->Items->Add();
    					Item->Caption  = quantite;
    					Item->SubItems->Add(referenceproduit);
    					Item->SubItems->Add(type);
    					Item->SubItems->Add(marque);
    					Item->SubItems->Add(model);
    					SQLQuery1->Next();
    				}
     
    			}
    		}
    		else // pas de resultat
    		{
    		}
    Je l'ai ai mise dans un ListVieuw je sais pas si j'ai bien fait car maitenant que j'ai tt mes référence de produit avec la quantité corespondante, j'aimerais les classé par odre croisant de quantité pour ensuite les reprendre et les afficher dans un TChart.

    et je vois pas comment faire pour trier ces valeurs.

    Oeut être est je mal placée mes donnée, fallait peut etre pas utilisé un TListVieuw mais un autre compo qui permet de trier directement les valeurs par odre croisant ?

    Merci de vos conseils

  2. #2
    Membre éclairé
    Avatar de Interruption13h
    Inscrit en
    Août 2005
    Messages
    603
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 603
    Points : 786
    Points
    786
    Par défaut
    Salut !

    Tu peux ordonner tes données reçu depuis ta table avec SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM historique ORDER BY quantite
    Et tu peux ajouter à cette requete soit ASC ou DESC pour le trie ascendant ou descendant respectitivement.

    Mais, Tu risque d'être obligé pour tout effacer de ta ListView et de réafficher dans celle-ci, pour ne pas avoir un tri faussé si tu voi ce que je veux dire.


    Bonne chance !

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Points : 146
    Points
    146
    Par défaut
    oui mais le probleme et que je fais ma requete SQL et j'affiche dans mon panier en ajoutant a chaque fois +1 au quantité.

    et c'est cette listvieuw que je veux ordonancé ds l'ordre crossant. Car ma requete SQL est tout a fait aléatoire.

    Donc je dois partir de ma listview pour l'ordonancement.. et je me demandais si j'ai bien fais de classé mes valeurs dans une listview ?

    Merci

  4. #4
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Bonsoir,
    (ou bonjour, vu l'heure)

    Comme le dis Interruption13h, a mon avis c'est uniquement un problème de SQL.
    Les tris, mais aussi (si j'ai bien compris), le fait d'avoir le nombre d'article 'x' ou 'y' présent dans la selection, etc donc tout dépends de la facon dont sont organisées tes données et la requête dessus.
    De plus, effectivement, il aurait peut être mieux fallu passer par un composant comme TDBGrid pour afficher tes données.

    ++

  5. #5
    Membre éclairé
    Avatar de Interruption13h
    Inscrit en
    Août 2005
    Messages
    603
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 603
    Points : 786
    Points
    786
    Par défaut
    Salut !

    Je suis sûre que ça peut se faire uniquement avec le SQL, mais vu que je suis pas très fort en celui-ci, je vais adopter une autre solution qui suit le chemin de la tienne :
    Tu peux utiliser l'evenement OnCompare et la méthode AlphaSort de ton ListView, on en donne un exemple dans l'aide de BCB6 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    This example shows how to use the OnColumnClick and OnCompare events of a list view to let users sort the columns in a report-style list view by clicking on the column headers. This requires a global variable to keep track of the column that was clicked:
    
    int ColumnToSort = 0;
    
    The OnColumnClick event handler sets the global variable to indicate the column to sort and calls AlphaSort:
    
    void __fastcall TForm1::ListView1ColumnClick(TObject *Sender, TListColumn *Column)
    
    {
      ColumnToSort = Column->Index;
      ((TCustomListView *)Sender)->AlphaSort();
    }
    
    
    The OnCompare event handler causes the list view to sort on the selected column:
    
    void __fastcall TForm1.ListView1Compare(TObject *Sender, TListItem *Item1, TListItem *Item2, int Data, int &Compare)
    {
      if (ColumnToSort == 0)
        Compare = CompareText(Item1->Caption,Item2->Caption);
      else
      {
        int ix = ColumnToSort – 1;
        Compare = 
          CompareText(Item1->SubItems->Strings[ix], Item2->SubItems->Strings[ix]);
      }
    }
    
    Note:    This OnCompare event handler uses the global CompareText function. An application may want to use AnsiCompareText, CompareStr, or AnsiCompareStr instead, depending on whether the comparison should be case-sensitive and whether the locale should be considered.
    ceci apparament, trie la listview selon un ordre alphabétique, et seulement en cliquant sur l'entête des colonnes, essaye de modifier ça pour que le trie soit automatique (Sans cliquer sur les colonnes) et que le trie ne soit pas alphabétique, mais plutôt selon des valeurs entières(Quantités) par exemple.


    Si tu rencontre un problème, fais nous signe, on essayera de le résoudre ensemble.


    A+

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Points : 146
    Points
    146
    Par défaut
    Merci pour vos reponses.

    Si je stock mes valeurs dans un DBGrid il existe une fonction directement liée au DBgrid qui me permet d'afficher le tableau dans un ordre croissant ?

  7. #7
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Bonjour,

    NB: ORDER BY pourrait, a elle seule, t'aider.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Récupération des valeurs d'un fichier pour les copier dans un autre
    Par stelme dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/11/2011, 06h00
  2. Réponses: 9
    Dernier message: 05/11/2007, 11h05
  3. Récuperer les polygones pour les trier.
    Par LapinGarou dans le forum OpenGL
    Réponses: 7
    Dernier message: 31/01/2007, 13h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo