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

Bases de données Delphi Discussion :

Comment afficher les statistiques


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut Comment afficher les statistiques
    salut
    je developpe une application (Carnet de notes -Eleves)
    j'utilise une bd paradox avec Delphi7.
    tous marche tres bien . mais le probleme que je n'arrive pas à faire mes statistiques

    explication
    la colonne du devoir1 (Dev1) comporte des notes de 1 a 18

    comment afficher les valeurs suivantes sur des TEdit

    Edit1.Text := la valeur <8
    Edit2.Text:= la valeur entre 8 et 10
    Edit3.Text:= la valeur entre 10 et 11.99
    Edit4.Text:= la valeur > 12

    je joint un fichier explicatif

    je remerci toute aide

  2. #2
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    il faut générer tes stats avec une requête SQL.

  3. #3
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    Citation Envoyé par philnext Voir le message
    il faut générer tes stats avec une requête SQL.
    je remerci fortement votre passage.
    mais malhereusement cette requête je n'arrive pas a la construire puisqu'il a plusieur conditions(clause).

    c'est pour cela je vous demande gentillement l'aide .

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 689
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 689
    Points : 13 118
    Points
    13 118
    Par défaut
    Avec éventuellement des requêtes imbriquées. A voir si ça fonctionne en Paradox.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select
    (select count(*) from MaTable where Valeur < 8),
    (select count(*) from MaTable where Valeur between 8 and 9.99),
    (select count(*) from MaTable where Valeur between 10 and 11.99),
    (select count(*) from MaTable where Valeur >= 12)

  5. #5
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Avec éventuellement des requêtes imbriquées. A voir si ça fonctionne en Paradox.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select
    (select count(*) from MaTable where Valeur < 8),
    (select count(*) from MaTable where Valeur between 8 and 9.99),
    (select count(*) from MaTable where Valeur between 10 and 11.99),
    (select count(*) from MaTable where Valeur >= 12)

    Merci Andnotor

    je vais essayé ça et je reviens

  6. #6
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    j'ai essayé plusieur fois avec une table paradox et une autre fois avec une table access on manipulants toutes trucs mais toujour il y'a un message d'erreur

    le fichier joint expliquera mieux

  7. #7
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    C'est que Paradox et Access ne doivent pas apprécier les requêtes imbriquées.
    Tu peux toujours passer par des requêtes UNION.

    En me basant sur le projet de ton 1° message, définis la propriété SQL de QDev1 ainsi:

    Code sql : 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
    SELECT 
      0  AS Seuil, :S1 AS Plafond, Count(Dev1) AS Compte
    FROM Notes
    WHERE Dev1 < :S1
     
    UNION
    SELECT 
      :S1, :S2, Count(Dev1)
    FROM Notes
    WHERE Dev1 >= :S1 AND Dev1 < :S2
     
    UNION
    SELECT 
      :S2, :S3, Count(Dev1)
    FROM Notes
    WHERE Dev1 >= :S2 AND Dev1 < :S3
     
    UNION
    SELECT 
      :S3, 20, Count(Dev1)
    FROM Notes
    WHERE Dev1 >= :S3

    Ensuite dans le FormActivate de Form2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm2.FormActivate(Sender: TObject);
    begin
      with Qdev1 do
      begin
        Params.ParamByName('S1').AsInteger := StrToInt(EditS1.Text);
        Params.ParamByName('S2').AsInteger := StrToInt(EditS2.Text);
        Params.ParamByName('S3').AsInteger := StrToInt(EditS3.Text);
        Active := True;
      end;
    end;
    EditS1 à EditS3 contenant le "seuils/plafonds" 8, 10 et 12 par exemple.
    Tu devrais retrouver tes stats dans le DBGrid.

    @+ Claudius.

  8. #8
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    Oulala lala Cl@udius c’est magnifique ça marche très très très bien .
    Je ne sais pas comment vous remercie

    Sauf qu’il y’a un petit problème :
    Lorsque j’ai ajouté deux champs numéro de classes(N_Cls ) et numéro de trimestre(N_trm) et après jouer sur toutes les combines de votre requête je n’arrive pas a faire un filtre sur ces deux champs

    Pour vous faciliter la tache je joint un fichier selon votre requête

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 037
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    n'ayant pas Access (fichiers premières archive en mdb), je ne vois pas les descriptions de table donc je ne fais que supposer qu'il doit manquer un GROUP BY quelque part

    Avec le second archive
    ceci marche avec paradox , cependant plus moyen d'indiquer les tranches, seulement les valeurs mini et maxi de devoirs
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT 
      N_cls,n_tr,min(dev1),max(dev1), Count(Dev1) AS Compte
    FROM Notes
    WHERE Dev1 < :S1
    group by n_cls,n_tr 
    UNION
    SELECT 
       N_cls,n_tr,min(dev1),max(dev1), Count(Dev1)
    FROM Notes
    WHERE Dev1 >= :S1 AND Dev1 <= :S2
    group by n_cls,n_tr
    .....

    peut être qu'en créant une nouvelle table contenant les tranches et en utilisant une jointure ?
    table tranches
    MINI : NUMERIC
    MAXI :NUMERIC

    valeurs :
    MINI MAXI
    1 0 10
    2 10 20

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select a.n_tr,a.n_cls,t.mini,t.maxi,count(*) from notes a , tranches t 
    where a.dev1>=t.mini and a.dev1<t.maxi and t.mini=0
    group by n_tr,n_cls,mini,maxi
    union
    select a.n_tr,a.n_cls,t.mini,t.maxi,count(*) from notes a , tranches t 
    where a.dev1>=t.mini and a.dev1<t.maxi and t.mini=10
    group by n_tr,n_cls,mini,maxi
    semble donner de bons résultats , a vérifier et certainement améliorer
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  10. #10
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    Cl@dius :
    voici mes modifications :


    SELECT
    N_Cls,N_tr
    FROM Notes
    WHERE N_Cls=:C AND N_tr=:T
    GROUP BY N_Cls,N_tr


    UNION
    SELECT
    0 AS Seuil, :S1 AS Plafond, Count(Dev1) AS Compte
    FROM Notes
    WHERE Dev1 < :S1

    UNION
    SELECT :S1, :S2, Count(Dev1)
    FROM Notes
    WHERE Dev1 >= :S1 AND Dev1 < :S2

    UNION
    SELECT :S2, :S3, Count(Dev1)
    FROM Notes WHERE Dev1 >= :S2 AND Dev1 < :S3

    UNION
    SELECT :S3, 20, Count(Dev1)
    FROM Notes WHERE Dev1 >= :S3
    lorsque j'ajoute la requête en grise je reçoi le message d'erreur

    ( Différence de type dans une expression. Erreur BDE 11871 . [$2E] [$5F]).

    malgré que les pams [N_cl,N_tr] sont declarées integer

    ************************

    Citation Envoyé par SergioMaster Voir le message
    semble donner de bons résultats , a vérifier et certainement améliorer
    Bonjour MAISTRO

    ça marche vraiment bien vos deux requêtes .

    Mais mon problème.
    lorsque je veut Filtrer ma table sur deux champs ( N_Cls , N_tr ) il me revoit un message d'erreur ( Différence de type dans une expression. Erreur BDE 11871 . [$2E] [$5F]).


    SELECT N_Cls,N_tr
    FROM Notes a, Tranches t
    WHERE N_Cls=:C AND N_tr=:F
    GROUP BY N_Cls,N_tr


    UNION
    SELECT
    a.n_tr,a.n_cls,t.mini,t.maxi,count(*)
    FROM Notes a , Tranches t
    WHERE a.dev1>=t.mini AND a.dev1<t.maxi AND t.mini=0
    GROUP BY n_tr,n_cls,mini,maxi

    UNION
    SELECT a.n_tr,a.n_cls,t.mini,t.maxi,count(*)
    FROM notes a , tranches t
    WHERE a.dev1>=t.mini AND a.dev1<t.maxi AND t.mini=10
    GROUP BY n_tr,n_cls,mini,maxi

    donc ou j'ai fait la faille ?

    .

  11. #11
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Lorsque l'on contruit une requête UNION il faut impérativement que chaque SELECT renvoie le même nombre de champs et du même type.

    Essaye ceci:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT 
      N_Cls AS Classe, N_Tr As Trimestre, 0 AS Seuil, :S1 AS Plafond, Count(Dev1) AS Compte 
    FROM Notes 
    WHERE Dev1 < :S1 
    group by N_Cls, N_Tr
     
    UNION 
    SELECT N_Cls, N_Tr, :S1, :S2, Count(Dev1) 
    FROM Notes 
    WHERE Dev1 >= :S1 AND Dev1 < :S2 
    group by N_Cls, N_Tr
     
    -- etc...
    @+

  12. #12
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    claudius
    je suis vraiment

    mais le probleme c'est qu'il affiche toutes les classes et trimestres or je veut afficher la classe et le trimestre voulu

    je vous joint le fichier pour jeter un regard

    je suis vraiment désolé de vous prendre de ton temps

  13. #13
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Ah oui, j'aurais dû ajouter le critère au WHERE.
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT 
      N_Cls AS Classe, N_Tr AS Trimestre, 0 AS Seuil, :S1 AS Plafond, Count(Dev1) AS Compte 
    FROM Notes 
    WHERE Dev1 < :S1 and C_Cls = :C and N_Tr = :T
    GROUP BY N_Cls, N_Tr
     
    UNION 
    -- ainsi de suite
    Sans oublier d'alimenter les valeurs des paramètres C et T avant l'ouverture du Query.

    @+

  14. #14
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    OOOOOOOOOOOOOOOOORAAAAAAHHHHHH

    Merci plus l'infini CL@DIUS

    Vous etes vraiment un Maitre

    je ne sais comment vous remerci



  15. #15
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par MIWAN Voir le message
    je ne sais comment vous remerci
    Y'a pas de quoi.

    @+

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

Discussions similaires

  1. Comment afficher les pages suivantes d'un QuickReport ?
    Par bertrand_declerck dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/06/2005, 12h54
  2. Jointure;comment afficher les enregs "non doubles"
    Par Wismerill dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/04/2005, 09h30
  3. Comment afficher les toolTipText dans une zone de statut ?
    Par nicok01 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 28/01/2005, 13h32
  4. [web] comment afficher les erreur d'un cgi
    Par chtiboss dans le forum Web
    Réponses: 6
    Dernier message: 24/12/2003, 11h22
  5. Comment afficher les accent sous mysql v4.0.13
    Par buildozer dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/06/2003, 09h33

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