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 :

[QuickReport] Données d'une table et données calculées


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 25
    Points : 18
    Points
    18
    Par défaut [QuickReport] Données d'une table et données calculées
    Bjr
    Voila, j'ai un état seul à créer qui doit afficher :
    - des données d'une table (infos client ici)
    - et des données calculées (par client)

    dc je dois obtenir ca dans mon en-tête de colonne :

    codeclient - raisonsociale - adresse - nbre total danalyses n-1 - total n

    mon état ne se base donc pas sur une table mais sur plusieurs par requêtes, comment faire pour obtenir ma liste de tous ces clients ?
    je ne vois pas comment afficher les données calculées pr chaque client ?
    si vous pouvez m'éclairer...

  2. #2
    Membre à l'essai
    Inscrit en
    Mars 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 15
    Points : 17
    Points
    17
    Par défaut
    Tu peux mettre un label et sur le print de ce label tu mets le code que tu veux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure LabelPrint(sender: TObject;var Value: String);
    begin
    // tes requetes  
    Value := 'la valeur calculée que tu veux';
    end;
    le petit problème c'est que ce n'est pas tellement rapide !!!

    Sinon, tu utilses quelle base de données ?
    car tu peux peut être tout mettre dans une seule et même requête en utilisant les subquery.

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 25
    Points : 18
    Points
    18
    Par défaut
    pr info, j'utilise sql server...

    je comprends pas trop ta solution...peut-tu être plus clair car je débute

    merci

  4. #4
    Membre habitué
    Inscrit en
    Mai 2002
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 275
    Points : 185
    Points
    185
    Par défaut
    Bonjour,

    Tu dois faire une jointure entre les tables, donc je pense que ton code client est la cle primaire de ta table infos clients, et qu'elle est la cle étrangére de ta table données calculées.
    Dans ta clause where de ta requéte, tu mets codeclient de la table infos clients = codeclient de la table données calculées.
    Tu obtiendras par codeclient les données calculées.
    Enfin, j'ai bien compris. Sinon, Peux-tu donner plus informations?

    A+
    Cyril

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 25
    Points : 18
    Points
    18
    Par défaut
    voici ma requete qui affiche mes données clients :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     ssql:='select codeclient,libellecourtfoju,raisonsociale,client.adresse1,';
            ssql:=ssql+'client.cp,client.ville,tel1,typerapport,initiales';
            ssql:=ssql+' from client join salarie on client.codesalarie=salarie.codesalarie';
            ssql:=ssql+' and salarie.initiales= '''+cb_comm.text+'''';
            ssql:=ssql+' order by client.cp, client.raisonsociale';
            QuickReport3.sql_clients.close;
            QuickReport3.sql_clients.SQL.Clear;
            QuickReport3.sql_clients.SQL.Add(ssql);
            QuickReport3.sql_clients.Open;
    voici ma requete qui affiche mes données calculées :

    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
    if m<=3 then a:=a-1;
            annee:= inttostr(a);
            anneen:= inttostr(a-1);
            anneen2:=inttostr(a-2);
            begin
       ssql2 :='select count(codeechantillon) as nb from echantillon where supprime<>''O''';
       ssql2 := ssql2 + ' and gratuit=''''';
       ssql2 := ssql2 + ' and cli_codeclient= '''+ ?????? +'''';
       ssql2 := ssql2 + ' and datesaisie <= ''31/03/'+ annee +'''' ;
       ssql2 := ssql2 + ' and datesaisie >= ''01/04/'+ anneen +'''';
            QuickReport3.sql_calcul.close;
            QuickReport3.sql_calcul.sql.clear;
            QuickReport3.sql_calcul.sql.add(ssql2);
            QuickReport3.sql_calcul.open;
            end;

    la partie "?????" dans le where avec cli_codeclient doit être égale enfait au codeclient qui se trouve dans mon quick report...mais je ne vois pas comment le rattacher à celui ci...
    je ne vois pas comment faire

  6. #6
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    Excuse-moi mais j'ai un peu de problèmes pour lire ta première requête ?

    Les champs
    - codeclient, libellecourtfoju, raisonsociale, tel1, typerapport, initiales
    appartiennent-ils à la table client ?

    La jointure vers la table salaries est-elle nécessaire dans ta première requête.

    Utilises la fonction quotedStr(string) pour plus de clarté dans tes deux requêtes

    tiens moi au courrant

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 15
    Points : 17
    Points
    17
    Par défaut
    Désolée si je n'ai pas été très claire

    En faite, le subquery est une façon de faire faire des requêtes SQL, cela permet d'imbriquer plusieurs requêtes entre elles.
    Mais je vois que dans ta 2eme requete tu as un paramêtre date qui peut changer à chaque fois donc tu ne pourra pas utiliser les subquery.

    La requête qui affiche tes données clients tu la laisses où tu l'avais mise car elle se trouve bien avant le lancement de ton report.

    Pour tes champs calculés tu dois mettre un QRLabel sur ton report.
    c'est lui qui va contenir le champ calculé.
    Dans la propriété ONPRINT de ce label tu mets
    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
     
    if m<=3 then a:=a-1; 
    annee:= inttostr(a); 
    anneen:= inttostr(a-1); 
    anneen2:=inttostr(a-2);  
    ssql2 :='select count(codeechantillon) as nb from echantillon where '  +
              ' supprime<>''O''  and gratuit='''' and cli_codeclient= ''' + ?????? + 
              ' and datesaisie <= ''31/03/'+ annee +'''' + 
              ' and datesaisie >= ''01/04/'+ anneen +''''; 
    with QuickReport3.sql_calcul do
        begin
        close; 
        sql.clear; 
        sql.add(ssql2); 
        open; 
        end;
    à la place de tes ??????? tu mets la valeur de ton codeclient.
    Cette valeur tu la récupères directement à partir de ton objet sql_clients.

    J'espère que c'est un peu plus clair.

  8. #8
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    J'ai posté un peu vite jointure vers salarié pour récupérer les initiales

    pour ta seconde requête, et si tu utilises pour ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    and cli_codeclient in (select codeclient from client join salarie on client.codesalarie=salarie.codesalarie and salarie.initiales= '''+cb_comm.text+'''')
    Par contre peux-tu avoir plusieurs clients avec les mêmes initiales salariés ??

  9. #9
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 25
    Points : 18
    Points
    18
    Par défaut
    Pascal Jankowski, oui je peux avoir plusieurs clients avec les memes initiales :-(

    bbou, je comprends mieux...lol
    par contre je n'arrives pas à récupérer la valeur de mon code client...
    je récupére le code dans ma requete sql_clients ? (quickreport.sql_clients....??) arf

  10. #10
    Membre à l'essai
    Inscrit en
    Mars 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 15
    Points : 17
    Points
    17
    Par défaut
    en faite tu as du créer des champs persistant dans ta table.
    ( quand tu double click sur l'objet table et que tu fais un click droit ajouté
    des champs) et bien chaque champ a alors un nom c'est ce nom que tu récupère et que tu mets dans ta requete

    ex ma table s'appelle tblEssai
    et elle contientle champ client
    alors le nom qui est donné est en général tblEssaiCLIENT

    Et pour l'appelé tu fais tblEssaiCLIENT.asString et là tu récupères sa valeur.

  11. #11
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 25
    Points : 18
    Points
    18
    Par défaut
    bon j'ai bidouillé et ca marche...

    autre chose, je suis obligé de mettre ma requete sql_calcul aussi bien dans le onprint de mon qrdbtext du qrreport que dans le clic du bonton valider pr accéder à l'état, sinon rien ne s'affiche est ce normal ?

  12. #12
    Membre à l'essai
    Inscrit en
    Mars 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 15
    Points : 17
    Points
    17
    Par défaut
    c'est parce que tu as utilisé un qrdbText alors que le résultat de ton calcul tu dois le mettre dans un qrdbLabel !
    Soit tu le modifies, soit si tu es sure du résultat tu laisses comme ça !

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

Discussions similaires

  1. Affichage d'une partie des données d'une table de Base de données
    Par zpico dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 15/05/2012, 11h47
  2. Réponses: 16
    Dernier message: 20/05/2011, 20h12
  3. Réponses: 2
    Dernier message: 26/06/2009, 18h34
  4. Validation d'une Saisie de donnée dans une Table
    Par faressam dans le forum VBA Access
    Réponses: 10
    Dernier message: 14/09/2007, 18h02
  5. Réponses: 14
    Dernier message: 05/09/2006, 17h01

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