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

C++Builder Discussion :

Quick report maitre détail avec TQuery


Sujet :

C++Builder

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 13
    Par défaut Quick report maitre détail avec TQuery
    Salut, voilà

    j'ai deux tables
    Courrie(id_courier,date_c)
    observations(id_observations,profil,libelle,#id_courier)

    ces deux tables sont visibles via deux dbgrid différents
    le clic sur une ligne du dbgrid courrier nous affiche les observations concernées.

    je voudrais a partir d'un bouton me donner la prévisualisation des courriers avec les observations concernées.

    tous les courriers sont affichés sur l'état, et j'essaie de récuperer les annotations par cette requête et ça fonctionne pas


    dans la propriété strings du Query
    select * from observations
    where id_courrier=:idc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Query1->SQL->Clear();
    Query1->ParamByName("idc")->AsInteger=StrToInt(QRDBText1->Caption);
    Query1->Open();
    Merci,

  2. #2
    Candidat au Club
    Inscrit en
    Mars 2002
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 4
    Par défaut
    Tu ne veux que un seul courrier dans ton impression ?

    Jigé

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 13
    Par défaut
    Alors j'ai un Query qui gere mes courriers et en fonction du résultat affiché dans le DBGrid on doit avoir les observations concernnées sur l'état.

    merci,

  4. #4
    Candidat au Club
    Inscrit en
    Mars 2002
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 4
    Par défaut
    Alors,

    Tu as une fiche dans laquelle un Grid affiche les courriers. Tu remontes cette liste des courrier via un TQuery.

    Tu crées un TQuickReport dans lequel tu utilises 2 Tables, une pour la table courrier avec un DataSource associé, et une pour les observations.
    Tu mes tes deux tables en Maitre-détails sur les champs 'id_courier' et '#id_courier'.
    Tu utilises une Bande détail avec la Table1 et une bande Sub-détail avec la Table2

    Ensuite, sur l'évènement OnChange du DataSource de ton Query 'Courrier' (sur la fiche ou tu as tes grids donc...), tu mets le code suivant (en ayant bien sur faits les includes nécessaires pour avoir accès aux Tables du QuickReport):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //tblCourrier = Composant TTable connectée sur la table courrier
    //qryCourrier = Composant TQuery connecté sur la table courrier
    QuickReport1->tblCourrier->Filtered = false ;
    QuickReport1->tblCourrier->Filter = AnsiString("#IdCourrier = '") + qryCourrier->FieldByName("IdCourrier")->AsInteger + "'" ;
    QuickReport1->tblCourrier->Filtered = true ;
     
    QuickReport1->Preview() ;
    Et comme ca tu as filtré les enregistrments sur ceux du courrier sélectionné.

    Jigé

    [modéré par netah_25]
    [Balise [code] ajouté -
    Merci d'y penser a l'avenir]

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 13
    Par défaut
    ce que tu m'as posté je le fais dejà avec deux query

    un qui m'affiche tous les courriers et un autre qui recupere la valuer de l'id courrier en cours.

    alors sur l'état mes courriers sont dans une bande(rbDetail) avec des QRDBText ayant le datasource du Query des courriers

    et la deuxieme bande(rbSubDetaily est placé QRDBTEXT ayant le datasource du QUERY relatif aux observations (sur le quickReport);

    et a l'évenement QuickPreview
    je recupere chaque valeur de id_courrier(donc dans un QRDBTEXT) a l'aide d'une requete paramétrée qui est dans mon premier post.

    Je vois tous les courriers ça c'est bon mais par contre il m'envoie toutes les observations de ma base qu'ils soient en correspondance ou pas avec les courriers!!!!
    Bizarre jai dit Bizarre

  6. #6
    Candidat au Club
    Inscrit en
    Mars 2002
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 4
    Par défaut
    Ce que tu fais me parait compliqué !

    Si j'ai bien saisi, tes deux tables suivent une relation Un --> Plusieurs ?
    Dans la table Observation tu as une clef étrangère correspondant à la clef primaire de la table Courrier ? (IdCourrier et #IdCourrier).

    Pourquoi n'essaies-tu pas plus simplement d'employer deux composants TTable sur ton QuickReport ?

    Une table Courrier et une table Observation. Tu ajoute un DataSource sur la table Courrier, puis tu mets les deux tables en Maitre-Détail en utilisant l'"Object Inspector":

    1) Tu spécifie la propriété MasterSource de la table Observation en y mettant le DataSource de la table Courrier.
    2) Tu renseignes la propriété MasterFields en cliquant sur le bouton ... à côté. Il s'agit de mettre en relation les deux champs utilisés pour le maître-détail (en l'occurence IdCourrier et #IdCourrier).

    Ensuite tu n'as plus qu'a avoir une bande détail et une bande sub-détail (qui elle doit être reliée à la bande détail en utilisant la propriété "link band").

    Et chez moi en tout cas ca marche nickel !

    Pour finir, si tu désire n'avoir qu'un seul courrier, il te suffit de renseigner le champ "filter" de la table courrier.

    Jigé

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 13
    Par défaut
    Merci Jigé,
    tu m'as été d'une grande aide.C vrai que ce que je faisais était un ptit peu compliqué.

    Ben en réalité je n'ai utilisé qu'un seul TABLE qui a comme mastersource
    le DataSource qe mon Query puis apres restait a remplir les autres conditions materFields, indesFieldsName

    Vlà

    Merci Jigé,

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

Discussions similaires

  1. établir une relation Maitre/Détail avec SQL
    Par SmileSoft dans le forum C++Builder
    Réponses: 8
    Dernier message: 26/09/2009, 20h19
  2. Maitre/Détail avec différents panels
    Par greenzephyr dans le forum Windows Presentation Foundation
    Réponses: 11
    Dernier message: 11/09/2009, 10h48
  3. [2K8] rapport maitre-détail avec un seul dataset
    Par mooncoder dans le forum SSRS
    Réponses: 0
    Dernier message: 17/05/2009, 18h24
  4. Exemple d'application Relation Maitre-détail avec Dbexpress
    Par Peter K. dans le forum Bases de données
    Réponses: 0
    Dernier message: 13/11/2007, 11h33
  5. Probleme etat maitre détail avec TclientDataset
    Par sessime dans le forum Bases de données
    Réponses: 3
    Dernier message: 21/12/2005, 09h19

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