Bonjour tous le monde

Soit la requête RPrdPluVnd(SqlQuery) reliée à un Chart et formée uniquement de deux champs,(lbl_prd: Libellés des produits et Total: la somme des quantités)
qui affiche les Quantités des produits les plus importantes vendues, suivant un ordre décroissant, entre deux dates données.
Pour cette raison on exécutera cette requête deux fois de suite:

la première affiche tous les enregistrements afin de retirer une valeur limite (v) des quantités.
la deuxième affiche les enregistrements ayant des quantités supérieures à cette valeur (v)

RPrdPluVnd:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
SELECT  PrdsBase.lbl_prd ,SUM(Ventes.Qte_vnt) as Total 
FROM Ventes INNER JOIN Majprdstk ON (Ventes.Num_prdv=MajPrdStk.Num_prdk)
INNER JOIN PrdsBase on(PRDSBASE. REF_PRD= MAJPRDSTK. REF_PRDK)
 
WHERE     Ventes.Dat_vnt>=:D1 and  Ventes.Dat_vnt<=:D2
GROUP BY  PrdsBase.lbl_prd
HAVING    SUM(Ventes.Qte_vnt)>=:Q
ORDER BY  Total DESC
Chart1
-BottomAxis/positionUnits: cuPixel

DbChartSource1:
-DataSource: Datasource1
-FieldText: LBL_PRD
-FieldY: Total

Chart1BarSerie1:
-Source: DbChartSource1
-BarWidthPercent: 50
-Marks/Style:smsLabel //pour faire apparaitre les étiquettes des bars.

Button1:
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
procedure TGraphe.Button1Click(Sender: TObject);  
var i:integer; v:currency; 
  begin
  Chart1BarSeries1.Active:=false ;
  //La première exécution de la requête affiche tous les enregistrements.
  mdr.RPrdPluVnd.Close;
  mdr.RPrdPluVnd.Params[0].AsDate:=DateTimePicker1.Date;
  mdr.RPrdPluVnd.Params[1].AsDate:=DateTimePicker2.Date;
  mdr.RPrdPluVnd.Params[2].AsCurrency:=0 ;
  mdr.RPrdPluVnd.Open ;
 
  mdr.RPrdPluVnd.First;
  For i:=1 to 29 Do //  affiche 29+1 enregistrements.
  mdr.RPrdPluVnd.Next ;
  if  mdr.RPrdPluVnd.FieldValues['Total']<> Null then
  v:=mdr.RPrdPluVnd.FieldValues['Total']
  else
  v:=0;
  //La deuxième exécution de la requête affiche les 30 premiers enregistrements.
  mdr.RPrdPluVnd.Close;
  mdr.RPrdPluVnd.Params[0].AsDate:=DateTimePicker1.Date;
  mdr.RPrdPluVnd.Params[1].AsDate:=DateTimePicker2.Date;
  mdr.RPrdPluVnd.Params[2].Ascurrency:=v;
  mdr.RPrdPluVnd.Open ;
  Chart1BarSeries1.Active:=True;
 end;
merci à tous.