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 :

calcul de pourcentage dans une requête


Sujet :

Bases de données Delphi

  1. #1
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut calcul de pourcentage dans une requête
    Salut ; j'ai la requête suivante
    SELECT T1.TB,Count(T1.TB) AS [Total]
    fROM T1
    where
    datedec>=:dt1
    and
    datedec<=:dt2
    GROUP BY T1.TB
    qui me retourne le résultat suivant :
    A1 = 205,
    A2=300,
    c'est deux résultats sont affichés dans un dbgrid , et pour affiché le pourcentage de chaque élément dans le même dbgrid j'ai utilisé un champ calculé 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
     
    procedure TDM.sreptbCalcFields(DataSet: TDataSet);
    begin
    m:=0;// var de type integer déclaré au début
     
                         dm.sreptb.First;
                          while not(dm.sreptb.Eof) do
                          begin
                          m:=m+ (dm.sreptbTotal.AsInteger);// Total de chaque A
                          dm.sreptb.Next;
                          end;
    dm.sreptbTFC.Value:= ceil((dm.sreptbTotal.Value*100)div m);// valeur du champ calculé
     
    end;
    apparemment sa marche pas , je suis bloqué

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    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 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Quelques remarques :
    - Quelle est la SGBD utilisée (par exemple Firebird permettrait de faire les calculs dans la Query)
    - Pourquoi ne pas utiliser une query pour récupérer le total 'm' indépendante du OnCalcFields (refaire a chaque enregistrement le calcul , c'est une herésie) par exemple dans un After / BeforeOpen

    - enfin je comprend que cela ne fonctionne pas , bonjour la boucle sur le datasource
    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

  3. #3
    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

    Citation Envoyé par SergioMaster Voir le message
    Quelle est la SGBD utilisée
    C'est Access, repérable aux crochets autour de Total.

    Citation Envoyé par SergioMaster Voir le message
    Pourquoi ne pas utiliser une query pour récupérer le total 'm' indépendante du OnCalcFields
    +1, d'autant que si je comprends bien m est égal à RecordCount.

    Citation Envoyé par SergioMaster Voir le message
    enfin je comprend que cela ne fonctionne pas , bonjour la boucle sur le datasource
    +1. Effectuer un balayage sur le DataSet sur lequel s'effectue le CalcFields.
    A proscrire.

    @+

  4. #4
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Bonjour; merci pour vos interventions ;je suis sous [D7+ access 2003], le "m" est la somme de tous les éléments .
    alors je lancer une deuxième requête qui me calcule le "m" et calculé le pourcentage.

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

Discussions similaires

  1. SQL calculer pourcentage dans une requête
    Par phcm971 dans le forum HyperFileSQL
    Réponses: 13
    Dernier message: 29/10/2012, 11h15
  2. [AC-2007] Calcul de pourcentage dans une requête
    Par Nephyline dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 05/10/2009, 15h31
  3. faire un calcul d'age dans une requête hibernate
    Par sandrine49 dans le forum Hibernate
    Réponses: 3
    Dernier message: 14/02/2009, 11h42
  4. [Access] Calcule par ligne dans une requête
    Par Belze dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/02/2006, 09h09
  5. Calcul de différence dans une requête
    Par Le Pharaon dans le forum Langage SQL
    Réponses: 8
    Dernier message: 19/05/2005, 13h16

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