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

SQLite Discussion :

Sqlite Somme de colonnes


Sujet :

SQLite

  1. #1
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 219
    Par défaut Sqlite Somme de colonnes
    Bonjour à tous,
    Problème du jour. J'ai une BDD contenant entre autre un champ montant_debit dont je souhaite faire la somme. J'ai cherché dans mes vieux codes je n'ai jamais fait ça. Voici le code que j'ai concocté en piochant ici ou là sur le Net.
    Ceci est un essai rapide (1 connecteur, 1 Query, 1 Datasource, 1 bouton, 1 DBGrid, 1 TEdit) sur 1 colonne (somme_debit) :
    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 TForm1.Button1Click(Sender: TObject);
    var Total_debit: Extended;
    begin
    FormatSettings.DecimalSeparator := '.';
    With QJournal do
    begin
      SQL.Clear;
      SQL.Text := 'SELECT SUM(montant_debit) As Total_debit FROM tblJournal WHERE Num_operation <> 0';
      Open;
      Total_debit := QJournal.FieldByName('montant_debit').AsFloat;
    end;
          Edit1.Text := FormatFloat('0.00',Total_debit);
    end;
    Accessoirement, le champ montant_debit est en REAL(6,2).
    Pourquoi ai-je un message m'indiquant que la colonne montant_debit est non trouvée bien que présente dans la table tblJournal, le total s'affichant quand même dans le DBGrid (avec une seule décimale) mais pas dans mon Edit.
    Merci pour votre aide.
    Cordialement

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 427
    Par défaut
    Bonjour,
    La colonne est "non trouvée" car u tu as mis un alias dans la clause SELECT: Total_debit. C'est donc cette colonne que tu dois récupérer dans ton code.

    Tatayo

  3. #3
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 219
    Par défaut
    Ok ça fonctionne mieux avec votre solution, c'est sûr. Je n'avais pas du tout percuté.
    Encore merci Tatayo
    Cordialement

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 587
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    Si QJournal est une query Firedac (et donc si Firedac il y a) je suggérerai une approche plus compacte en utilisant FDConnection.ExecSQLScalar

    sans avoir tester, je pense à quelque chose comme ceci
    Code Delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TForm1.Button1Click(Sender: TObject);
    var Total_debit: Extended;
    begin
    TotalDebit:=FDConnection.ExecSQLScalar('SELECT SUM(montant_debit) As Total_debit FROM tblJournal WHERE Num_operation <> 0');
    Edit1.Text := FormatFloat('0.00',Total_debit);
    end;

  5. #5
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 219
    Par défaut
    Je suis ennuyé car la solution de Serge fonctionne également et je suis donc devant un dilemme : quelle solution adopter ? Mais abondance de bien ne nuit pas.
    Merci à tous les deux.
    Cordialement

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 587
    Billets dans le blog
    65
    Par défaut
    Je suis content que, à main levée, mon code ait fonctionné
    Bien que encore un fois il s'agisse plus d'une question Delphi que SQLite.
    Moi je suis pour le compactage de code, moins il y a de composant (dans ce cas pas de QJournal) plus facile sera la maintenance, tel est mon avis.

    Je note aussi un FormatSettings.DecimalSeparator := '.'; qui n'est pas vraiment approprié dans le sens où il change le TFormatSettings de la session. Ile eu mieux valu créer une variable de TFormatsettings spécifique à la routine et utiliser la version surchargée function FormatFloat(const Format: string; Value: Extended; const AFormatSettings: TFormatSettings)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var FS : TFormatSettings;
    begin
    FS:=TFormatSettings.Create;  // ou FS:=TFormatSettings.Create('en-US'); ce qui évite la ligne suivante
    FS.Decimal.DecimalSeparator := '.'; 
    ...
    Edit1.Text := FormatFloat('0.00',Total_debit,FS);

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

Discussions similaires

  1. Somme de colonne sur sqlite
    Par lekev262 dans le forum SQLite
    Réponses: 2
    Dernier message: 26/04/2015, 14h12
  2. Somme de colonne comme sur Sql Server
    Par Soulama dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 16/06/2010, 13h51
  3. somme de colonnes HTML
    Par freestyler1982 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/11/2006, 11h27
  4. faire une somme de colonnes ?
    Par viny dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 08/09/2006, 15h49
  5. Réponses: 5
    Dernier message: 07/06/2006, 17h04

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