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 :

Faire une somme avec TQuery


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 92
    Points
    92
    Par défaut Faire une somme avec TQuery
    bonjour

    voila le program

    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
    procedure TForm4.Button4Click(Sender: TObject);
    var requete, E3 : string ;
        E1,E2 : Tdate;
    begin
    E1 :=  strtodate(edit2.text);
    E2 :=  strtodate(edit3.text);
    E3 := edit1.text;
     
    requete := 'select sum(:E1) form table_joursemaine  where (date between :E2 and :E3) group by lignes )';
    query1.active := true;
    query1.SQL.Clear;
    query1.SQL.Add(requete);
    query1.Prepare;
    query1.Open;
    end;
    E3 reçoi le nom du journal

    et je veux calculer la somme de la distribution de ce journal entre deux date

    date1 c E1

    date2 c E2

    lignes c les villes

    il maffiche un message derreur " unexpected end of command token line number''

    si quelquun peu maider ?

    merci

  2. #2
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Alors déjà, plusieurs choses :
    - E1 est une date apparemment et dans ta requête tu veux faire une somme de date ? Déjà là, il y a un soucis je dirai ...
    - Dans une requête, si tu veux passer une date, elle sera en chaine de caractères ... sinon, il faut utiliser la méthode avec ParamByName :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query1.ParamByName('E2').AsDate:=StrToDate(Edit3.Text);
    - L'utilisation de paramètre dans une requête ne se fait pas aussi simplement que tu le marques ... Il faut passer par la méthode ParamByName... Voici un exemple ci dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query1.ParamByName('E1').AsString:='toto';
    - Enfin, je dirai qu'il faudrait écrire d'abord ta requête paramétrée puis mettre les paramètres adéquats et enfin l'exécuter ...

    J'espère qu'avec tous ces conseils tu vas résoudre tes soucis.
    A+

  3. #3
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 92
    Points
    92
    Par défaut
    ok, je fait le test et je vous rend la reponse


    mais moi je veux faire la somme de E1 entre deux date qui sont E2 et E3

    merci

  4. #4
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Re,

    Ba en fait, j'ai un peu de mal ...
    Tu déclares E1 et E2 en TDate et E3 en String ... Alors je ne sais pas si tu t'ai trompé ou autre ...

  5. #5
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 92
    Points
    92
    Par défaut
    ok, je fait le test et je vous rend la reponse


    mais moi je veux faire la somme de E3 entre deux date qui sont E1 et E2

    desole je me suis tromper
    merci

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

    Essaye comme ceci:
    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
    var 
      AggField: string ;
      StartDate, EndDate: TDate;
    begin
      // Champ sur lequel s'effectue la somme
      AggField := Edit1.Text;
      // Période sur laquelle se limite la somme
      StartDate := StrToDate(Edit2.Text);
      EndDate := StrtoDate(Edit3.Text);
     
      with Query1 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('select Lignes, sum(' + AggField + ') Total');
        SQL.Add('from table_joursemaine');
        SQL.Add('where MaDate between :StartDate and :EndDate');
        SQL.Add('group by Lignes');
        ParamByName('StartDate').AsDate := StartDate;
        ParamByName('EndDate').AsDate := EndDate;
        Prepare;
        Open;
      end;
    end;
    @+

  7. #7
    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
    je subodore des difficultés avec le BETWEEN (enfin cela dépend de la BDD et du format de stockage de la date)

    mais sinon +1 @Claudius
    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

  8. #8
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Petite erreur dans ton code Cl@udius (si je ne me trompe pas) ...
    Tu as oublié un AS.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SQL.Add('select Lignes, sum(' + AggField + ') AS Total');
    A+

  9. #9
    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
    Sauf erreur de ma part, delphino travaille avec Firebird (ou Interbase), et avec ce SGBD le as est facultatif.

    Mais tu as raison, ça ne coute rien de le rajouter.

    @+

  10. #10
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Sauf erreur de ma part, delphino travaille avec Firebird (ou Interbase), et avec ce SGBD le as est facultatif.

    Mais tu as raison, ça ne coute rien de le rajouter.

    @+
    Je prends note de cela ... Je pensais que c'était obligatoire !
    Merci pour ta précision Cl@udius

  11. #11
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 92
    Points
    92
    Par défaut
    desoler je vien de rentrer je vais essayer le program et je vous repondrai


    merci

  12. #12
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 92
    Points
    92
    Par défaut
    bonjour avec ce program il maffiche lerreur suivante :

    invalid use of keyword
    token : date
    line number :3

    et jarrive pas a serner le probleme jai tout fait meme jai du refaire ma table et sa donne le meme resultat


    merci

  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
    Salut

    Si tu as nommé ton champ Date, sache que c'est une mauvaise idée. D'où l'erreur que tu obtiens:
    "Utilisation incorrect d'un mot-clé."

    Nomme ton champ autrement, par exemple DateLivraison ou tout autre nom plus explicite.

    @+ Claudius

  14. #14
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 92
    Points
    92
    Par défaut
    ok je vais le faire

    merci

  15. #15
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 92
    Points
    92
    Par défaut
    tres bien sa marche tres bien merci


    jai changer la date en date_liv et c bon

    merci

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

Discussions similaires

  1. faire une somme avec réinitiliasation
    Par horalass dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 30/05/2009, 10h26
  2. [XL-2003] Faire une somme avec la fonction sous total
    Par Gwladys dans le forum Excel
    Réponses: 2
    Dernier message: 09/04/2009, 17h26
  3. Faire une somme avec un range
    Par Prekestolen dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 28/01/2009, 17h35
  4. [XML][Debutant]Faire une somme avec condition...
    Par cackybis dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 19/04/2006, 16h07
  5. [Excel]Faire une somme avec une macro
    Par Chlo dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 13/01/2006, 19h53

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