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

QuickReport Discussion :

message erreur requette sql en delphi


Sujet :

QuickReport

  1. #1
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 89
    Points : 49
    Points
    49
    Par défaut message erreur requette sql en delphi
    bonjours

    je travaille avec delphi 7 et sql 2008
    j'ai une table nommé Consom_CB ou j'ai comme comme champs "immat_vehic" et "Nbr_bon"


    j'ai pu faire cette requette en sql qui est celle ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select immat_vehic, sum (nbr_bon)As total
    from Consom_CB  
    group by consom_cb.Immat_Vehic
    avec language delphi

    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
    Query1.active:=false;                              
        Query1.Sql.Clear;
        Query1.Sql.Add
    
    
    ('select immat_vehic,sum(nbr_bon) As total_bon from Consom_CB WHERE consom_cb.date_emis BETWEEN :DD AND :DF group by consom_cb.immat_vehic');
    
    Query1.ParamByName('DD').asDateTime:=datetimepicker1.Date;
    Query1.ParamByName('DF').asDateTime:=datetimepicker2.Date;
    
    Etat_RecapF.QuickRep1.DataSet:=Fiche_RecapCBF.Query1;
    Etat_RecapF.QRDBText1.DataSet:=Fiche_RecapCBF.Query1;  // QRDBText1 affiche  immat_vehic
    Etat_RecapF.QRLabel20.Caption:=inttostr(query1.FieldByName('total_bon').AsInteger );////  // qrlabel20 affiche total_bon 
    Query1.Active:=false;
    Query1.Active:=true;
    
    Etat_RecapF.QRLabel27.Caption:=DateTimeToStr(datetimepicker1.Date);
    Etat_RecapF.QRLabel28.Caption:=DateTimeToStr(datetimepicker2.Date);
    
    Etat_RecapF.QuickRep1.Preview;
    Sauf que en delphi et en executant un message d'erreur s'affiche
    "Query1 champ total_bon non trouvé"


    je ne sais quoi faire
    merci

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    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 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    cela parait logique puisque votre requête n'est ouverte qu'après la ligne appelante !

    Plusieurs remarques sur votre manière de coder :
    le SQL, pas la peine de rappeler le nom de table pour une requête n'en utilisant qu'une

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select immat_vehic, sum (nbr_bon)As total
    from Consom_CB  
    group by Immat_Vehic
    le code Delphi soit vous utilisez plusieurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     SQl.clear;
     SQL.Add('select immat_vehic,sum(nbr_bon) As total_bon from Consom_CB');
     SQL.Add('WHERE date_emis BETWEEN :DD AND :DF');
     SQL.add('group by immat_vehic');
    ce qui justifie le SQL.Clear
    soit utilisez un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL.text:='select immat_vehic,sum(nbr_bon) As total_bon from Consom_CB WHERE date_emis BETWEEN :DD AND :DF group by immat_vehic';
    sans besoin du SQL.Clear mais nuisant à la lisibilité

    Dernier point il s'agit plus d'une erreur de codage Delphi qu'un problème QuickReport
    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
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 89
    Points : 49
    Points
    49
    Par défaut
    Merci pour votre aide mais je suis coincé là.

    Toujours le même message :
    query1.total_bon non trouvé
    J'ai pu faire ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Etat_RecapF.QRLabel20.Caption:= inttostr(QUERY1.FieldByName('total_bon').Asinteger);
    mais ça m'affiche que le calcul du premier enregistrement
    c-a-d la requête ne prend en charge que le calcul du premier enregistrement immat_vehic avec le résultat sum(nbr_bon).

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    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 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    je doute que vous ayez compris ma première phrase
    cela parait logique puisque votre requête n'est ouverte qu'après la ligne appelante !
    cela vous suggérait d'écrire, en ligne 10 selon votre bloc de code, Query1.Active:=True; (les lignes 14 et 15 ne servant à rien)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Etat_RecapF.QRLabel20.Caption:= inttostr(QUERY1.FieldByName('total_bon').Asinteger);
    se remplace avantageusement en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Etat_RecapF.QRLabel20.Caption:= QUERY1.FieldByName('total_bon').AsString;
    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

  5. #5
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 89
    Points : 49
    Points
    49
    Par défaut
    Ça commence à m'énerver

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    query1.SQL.text:='select (immat_vehic) AS immatriculation,sum(nbr_bon)AS TOTAL_BON from Consom_CB WHERE date_emis BETWEEN :DD AND :DF group by immat_vehic';
    Query1.ParamByName('DD').asDateTime:=datetimepicker1.Date;
    Query1.ParamByName('DF').asDateTime:=datetimepicker2.Date;
    Query1.Active:=true;
    Etat_RecapF.QRLabel20.Caption:=QUERY1.FieldByName('TOTAL_BON').Asstring;
    Etat_RecapF.QRLabel21.Caption:=QUERY1.FieldByName('immatriculation').Asstring;
    Etat_RecapF.QuickRep1.Preview;
    Sauf que en exécutant mon programme j'obtiens comme résultat que le premier enregistrement de ma table "Consom_CB" les autres enregistrements ne s'affichent pas !!!!


  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    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 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    et bien sûr, avant de changer la requête (était-ce d'ailleurs nécessaire ?) vous n'avez pas oublier de fermer celle-ci ?

    à moins que ce soit votre logique qui est douteuse, pour ce que j'en lit votre requête ne s'exécute qu'une seule fois avant la création de l'état.

    Avec les indications fournies je ne peux que me poser des questions

    La clé d'un état est souvent la source de données. Avez vous déjà entendu parlé de CTE ? car j'ai l'impression que c'est ce qu'il vous faut

    en me basant sur le peu d'informations fournies je présume que vous voulez éditer une liste de véhicules disons contenue dans une table VEHICULES et obtenir le nombre de bons de travail/consommation ? correspondant et ce dans une période donnée

    Soit quelque chose de ce genre, en admettant que vous ayez un SGBD qui le permette ! (j'ai crus lire SQL Server dans un de vos autres post)
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    WITH B AS (SELECT immat_vehic,sum(nbr_bon) AS TOTAL_BON 
                    from Consom_CB 
                    WHERE date_emis BETWEEN :DD AND :DF 
                    group by immat_vehic)
    SELECT V.*,COALESCE(B.TOTAL_BON,0) AS TOTAL_BONS  
    FROM VEHICULES V LEFT JOIN B ON V.immat_vehic=B.immat_Vehic

    le SUM(nbr_bon) me paraît incorrect, du moins selon l'énoncé que j'ai émis, mais comme cela dépend de votre de structure de base de données, je vous laisse le bénéfice du doute.

    Vous n'avez pas la possiblité d'utiliser de CTE ? alors utiliser la première requête correctement c'est à dire à l'intérieur de l'evènement BeforePrint de la bande 'détail' (celle qui imprime les informations véhicule) en n'oubliant pas de rajouter un paramètre immatriculation
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT sum(nbr_bon) AS TOTAL_BON 
                    from Consom_CB 
                    WHERE immat_vehic=:IMMAT AND date_emis BETWEEN :DD AND :DF

    Ça commence à m'énerver
    ne doutez pas que moi aussi ! Car vous n'avez pas fourni la moitié des informations nécessaires ce que je vous reprochais déjà dans une autre discussion.
    de plus ce problème n'est pas vraiment lié à Quickreport mais plutôt un problème de données à fournir à l'état
    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

Discussions similaires

  1. mysqli message erreur affiche sql php
    Par ronan71 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 01/12/2016, 12h31
  2. Réponses: 1
    Dernier message: 05/10/2005, 11h04
  3. message d'erreur "Microsoft SQL-DMO"
    Par tachi dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 17/08/2004, 11h47
  4. requette sql compliqué sous delphi
    Par developpeur_mehdi dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/03/2004, 16h33

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