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 :

[QuickReport]Impressions à partir de 2 requetes


Sujet :

C++Builder

  1. #1
    Membre régulier Avatar de Poilou
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 59
    Points : 70
    Points
    70
    Par défaut [QuickReport]Impressions à partir de 2 requetes
    Bonjour,

    Je souhaite imprimer une fiche d'intervention contenant des informations de 2 tables (Liaison de 1 à n)

    Pour cela j'utilise 2 requetes :

    - la 1ere sur mon enregistement principale retournant qu'un seul enregsitrement.
    - la 2nde sur la table liée par l'identifiant de la 1ere table retournant plusieurs enregistrements.

    Ca j'arrive, ca marche bien. Je crée un subdétail pour la deuxieme requete et tout marche bien.

    Maintenant je voudrais utiliser ce principe sur plusieurs enregistements de la 1ere table.

    Voici mes requetes :

    Mes tables se nomment ENSEMBLE et PANNEAU
    PANNEAU est lié à ENSEMBLE par PAN_ENS_ID

    1ere Requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AnsiString Requete="SELECT ENS_ID, ENS_SENS, ENS_NB_SUP, ENS_PHOTO_R, ENS_PHOTO_V FROM ENSEMBLE WHERE ENS_ID="+Intervention_Ens;
    Et la 2éme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AnsiString RequetePan="SELECT PAN_ID, PAN_RECTOVERSO, PAN_ANNEE, PAN_ARRETE FROM PANNEAU WHERE PAN_ENS_ID="+Intervention_Ens;
    J'aimerais savoir comment faire quand j'ai plus d'un identifiant. J'ai essayé de mettre un IN dans la 1ere requete, mais le probleme c'est que je ne sais pas comment dire que dans ma deuxieme requete, je ne veux pas tous mes panneaux mais que ceux de l'ensemble correspondant...

    Si c'est possible...

    J'espere ne pas trop etre compliqué dans mes explications :-P


    Merci d'avance

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 23
    Points : 24
    Points
    24
    Par défaut
    Bonjour,
    Je vois que tu essaye de faire des jointures sur tes tables,
    Mais en fait au lieu de faire 2 requête, tu peux faire la même chose avec une seule requête.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT PANNEAU.PAN_ID, PANNEAU.PAN_RECTOVERSO, PANNEAU.PAN_ANNEE, PANNEAU.PAN_ARRETE, ENSEMBLE.ENS_ID, ENSEMBLE.ENS_SENS, ENSEMBLE.ENS_NB_SUP, ENSEMBLE.ENS_PHOTO_R, ENSEMBLE.ENS_PHOTO_V 
    FROM PANNEAU,ENSEMBLE 
    WHERE PANNEAU.PAN_ENS_ID = ENSEMBLE.ENS_ID;
    C'est peut être une partie de la réponse.
    Mais ce qu'il faudrait, c'est que tu formule exactement ce que tu demande, car tu parles également de IN et là, ça serait complétement différent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    SELECT PANNEAU.PAN_ID, PANNEAU.PAN_RECTOVERSO, PANNEAU.PAN_ANNEE, PANNEAU.PAN_ARRETE, 
    FROM PANNEAU,ENSEMBLE 
    WHERE PANNEAU.PAN_ENS_ID IN
     
      (SELECT ENSEMBLE.ENS_ID
       FROM ENSEMBLE
       WHERE XXXXXXXXXXXX);
    Remarque bien que dans ce cas là, ta première requête ne contient plus tous les enregistrements que tu avais mis, mais juste ENS.ID qui sert de réfèrence pour ta deuxième requête.

    J'éspère que ça t'aideras, mais je pense qu'il faut que tu en dises un peu plus pour que je puisse répondre exactement à ta demande.

    A Bientôt

  3. #3
    Membre régulier Avatar de Poilou
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 59
    Points : 70
    Points
    70
    Par défaut
    Bonjour,

    C'est vrai qu'actuellement je pourrais tout mettre dans une seule requete.

    Ce que je voudrais c'est pouvoir selectionner plusieurs ENSEMBLE (J'ai une liste d'identifiant) et les PANNEAU associés. Pour au final, imprimer un ENSEMBLE et les PANNEAU associés par page.

    Pour les PANNEAU, je ne connais pas le nombre par ENSEMBLE donc je duplique, dans mon état, le bloc des informations PANNEAU en les mettant dans un SubDetail avec dans l'Expression : PANNEAU.PAN_ID pour que ca change à chaque PANNEAU.


    j'ai essayé de mettre ça pour le premiere requete lié à mon état :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT ENSEMBLE.ENS_ID, ENSEMBLE.ENS_SENS, ENSEMBLE.ENS_NB_SUP, ENSEMBLE.ENS_PHOTO_R, ENSEMBLE.ENS_PHOTO_V 
    FROM ENSEMBLE WHERE ENSEMBLE.ENS_ID IN (147449,147468,147471);
    Puis la même chose pour les PANNEAU dans le Subdetail :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT PANNEAU.PAN_ID, PANNEAU.PAN_RECTOVERSO, PANNEAU.PAN_ANNEE, PANNEAU.PAN_ARRETE FROM PANNEAU WHERE PANNEAU.PAN_ENS_ID IN (147449,147468,147471);
    Mais ca ne marche pas car il n'associe pas les PANNEAU aux ENSEMBLE
    et je me retrouve avec tous les enregistements de PANNEAU par ENSEMBLE :-(


    J'ai ensuite essayé de mettre une variable mais je ne sais pas comment la faire varier :
    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
     
    AnsiString Requete="SELECT ENSEMBLE.ENS_ID, ENSEMBLE.ENS_SENS, ENSEMBLE.ENS_NB_SUP, ENSEMBLE.ENS_PHOTO_R, ENSEMBLE.ENS_PHOTO_V FROM ENSEMBLE WHERE ENSEMBLE.ENS_ID IN (147449,147468,147471);"
     
     Query->ConnectionString = CheminBase();
     Query->Close();
     Query->SQL->Clear();
     Query->SQL->Add(Requete);
     Query->Prepared=true;
     Query->Open();
     
     Group_Ens->Expression = "Query.ENS_ID";
     
     AnsiString RequetePan="SELECT PANNEAU.PAN_ID, PANNEAU.PAN_RECTOVERSO, PANNEAU.PAN_ANNEE, PANNEAU.PAN_ARRETE FROM PANNEAU WHERE PANNEAU.PAN_ENS_ID ="+Query->FieldByName("ENS_ID")->AsString+"";
     
     Query_Pan->ConnectionString = CheminBase();
     Query_Pan->Close();
     Query_Pan->SQL->Clear();
     Query_Pan->SQL->Add(RequetePan);
     Query_Pan->Prepared=true;
     Query_Pan->Open();
     
     Group_Pan->Expression = "Query_Pan.PAN_ID";
    Mais la il ne me fait jamais varié
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query->FieldByName("ENS_ID")->AsString
    Je ne plus trop vers ou chercher...peut etre faut il queje multiplie mon impression ( X impressions d'une page plutot qu'une impression de X pages)....

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 23
    Points : 24
    Points
    24
    Par défaut
    Alors, il y a deux choses :
    Premièrement peut être peut-tu utiliser la propriété Params de ta TQuery.

    Ensuite, quelle BDD utilises-tu?

    A Bientôt

  5. #5
    Membre régulier Avatar de Poilou
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 59
    Points : 70
    Points
    70
    Par défaut
    Ah oui pardon , j'utilise access et Bcb 6 comme kit de dev.

    Je regarde pour la propriete params

    merci :-)

  6. #6
    Membre régulier Avatar de Poilou
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 59
    Points : 70
    Points
    70
    Par défaut
    Pour ceux qui ont le même probléme j'ai trouvé une genre de soluce...

    Sur l'evenement OnBeforePrint , je charge ma requete principale et je stocke ma liste d'identifiants dans une StringList.

    Sur l'evenement OnStartPage , je charge ma requete secondaire qui a comme parametre une case de ma StringList dont j'incremente l'index à chaque page.

    Voili voilou...

    Merci ORLIK en tout cas de m'avoir répondu, il est toujours utile d'avoir un oeil exterieur

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 23
    Points : 24
    Points
    24
    Par défaut
    De rien. L'entraide ça marche dans les 2 sens.
    Bonne continuation

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

Discussions similaires

  1. supprimer un enregistrement a partir d'une requete
    Par tooneygirl dans le forum Access
    Réponses: 3
    Dernier message: 20/06/2005, 15h26
  2. Réponses: 6
    Dernier message: 19/11/2004, 16h52
  3. Tableau a partir d'une requete sql
    Par 10-nice dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/10/2004, 16h37
  4. [QuickReport ]Impression conditionnelle d'une bande
    Par DéGé dans le forum Bases de données
    Réponses: 4
    Dernier message: 17/07/2004, 13h00
  5. [TQuery]Réaliser une requete à partir d'une requete
    Par Eric SAULNIER dans le forum Bases de données
    Réponses: 2
    Dernier message: 09/07/2004, 12h00

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