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 :

QuickRep.peview depuis BD Access avec deux tables liées


Sujet :

QuickReport

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1
    Points : 3
    Points
    3
    Par défaut QuickRep.peview depuis BD Access avec deux tables liées
    J’utilise
    Delphi EX8 , quickReport 6.0, base de données Access avec deux tables : Adhérants (NumCarte, Nom, Prénom, DateNaissance, Catégorie)
    Créneau (N°, Type Abonnement, Jour1, Heure1, Jour2, Heure2, Mois, NumCarte) à noter 'NumCarte' comme clé étrangère dans la table créneau

    Je désir créer un état via QuickRep.preview pour faire ressortir la liste des adhérents pour un mois donné.
    Voici la séquence d’instruction qui me fait ressortir la liste mais le NumCarte ne s’affiche pas

    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
     procedure TFPrincip.Mois1Click(Sender: TObject);
    var x:string;
    begin
    if (inputQuery ('Liste des adhérant par mois','Introduire le mois :',X)) then
    begin
    AdoQuery2.DataSource:=datasource1;
    ADOQuery2.Active:=false;
    ADOQuery2.SQL.Clear;
    ADOQuery2.SQL.Add('Select * from Créneau, adhérants  where créneau.Mois = '''+x+''' and Créneau.numcarte = adhérants.numcarte');
    ADOQuery2.Active:=true;
    FListe.QuickRep2.DataSet:=adoquery2;
    FListe.QRDBText6.DataSet:=adoquery2;
    FListe.QRDBText6.DataField:='NumCarte';
    FListe.QRDBText10.DataSet:=adoquery2;
    FListe.QRDBText10.DataField:='Type Abonnement';
    FListe.QRDBText7.DataSet:=adoquery2;
    FListe.QRDBText7.DataField:='Nom';
    FListe.QRDBText8.DataSet:=adoquery2;
    FListe.QRDBText8.DataField:='Prénom';
    FListe.QRDBText9.DataSet:=adoquery2;
    FListe.QRDBText9.DataField:='Date Naissance';
    FListe.QuickRep2.Preview;
    end;
    Voici le résultat :

    Nom : Capture scrn.jpg
Affichages : 238
Taille : 122,5 Ko

    Novice et autodidacte en la matière, je compte sur vous pour m’aider à bien comprendre mon erreur
    Merci.

  2. #2
    Rédacteur/Modérateur

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

    Il y a beaucoup à dire !
    Delphi EX8
    un peu de dyslexie ? s'agit-il plutôt de XE8 que de la très mauvaise version Delphi 8 ? je gage qu'il s'agit plutôt de la première
    quickReport 6.0,
    pourquoi pas FastReport fourni avec XE8 ? surtout que, vu l'image fournie on à affaire à une version d'évaluation de Quickreport
    base de données Access, ADOQuery
    là je ne suis pas assez objectif ... je n'aime ni l'un ni l'autre

    Je préfère me pencher sur votre SQL que je trouve un peu trop "vieux jeu"
    utilisez les nouvelles (enfin pas tant que ça) normes
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    Select * from Créneau, adhérants  where créneau.Mois = '''+x+''' and Créneau.numcarte = adhérants.numcarte
    devient
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    Select * from Créneau JOIN  adhérants ON Créneau.numcarte = adhérants.numcarte  where créneau.Mois = '''+x+''
    mais encore mieux indiquez seulement les champs nécessaires
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    Select NumCarte,type abonnement,nom,prénom,date naissance from Créneau JOIN  adhérants ON Créneau.numcarte = adhérants.numcarte  where créneau.Mois = '''+x+''
    et le must serait d'utiliser une requête paramétrée
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    Select NumCarte,type abonnement,nom,prénom,date naissance from Créneau JOIN  adhérants ON Créneau.numcarte = adhérants.numcarte  where créneau.Mois =:M
    qui sera fixe dans ADOQuery2 car je n'ai pas l'impression, à la lecture du code que ADOQuery2 soit créée au runtime
    votre première partie de code deviendrait (à moins que ADOQuery2 soit réutilisée ailleurs)
    Code Delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TFPrincip.Mois1Click(Sender: TObject);
    var x:string;
    begin
    if (inputQuery ('Liste des adhérant par mois','Introduire le mois :',X)) then
    begin
    ADOQuery2.Active:=false;
    ADOQuery2.Params.ParamByName('M').asString:=X;
    ADOQuery2.Active:=true;
    ou
    Code Delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TFPrincip.Mois1Click(Sender: TObject);
    const SQLQ2 = ' Select NumCarte,type abonnement,nom,prénom,date naissance from Créneau JOIN  adhérants ON Créneau.numcarte = adhérants.numcarte  where créneau.Mois =:M'; 
    var x:string;
    begin
    if (inputQuery ('Liste des adhérant par mois','Introduire le mois :',X)) then
    begin
    ADOQuery2.Active:=false;
    ADOQuery2.SQL.Text:=SQLQ2;
    ADOQuery2.Params.ParamByName('M').asString:=X;
    ADOQuery2.Active:=true;
    P.S. à ce stade il y a peut être quelques erreurs (voir ce que je dis à propos de Access et ADO ) déjà dans la déclaration des champs (ou plutôt colonnes) car je n'ai pas l'habitude d'utiliser d'espace dans les noms de colonnes et au niveau de l'utilisation des params avec ADO

    Passons à la partie Quickreport. J'en suis resté à la version 3 et donc ne connais pas la version 6 mais il m'étonnerai que vous ayez besoin de réassigner tous les champs sauf si vous avez fait un programme qui construit l'état au runtime (je n'ai vu nul FListe.QuickRep2:=TQuickReport.Create; )

    pour le principe, je dirai également que la demande du mois par InputQuery est limite, perso j'aurais fait une forme contenant la demande du mois (zone edit numérique de 1 à 12), le ADOQuery2, un bouton et le Quickreport déjà dessiné. Le bouton TFPrincip.mois ne servant qu'a créer cette forme (forme par la suite détruite cela va de soit)
    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

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

Discussions similaires

  1. résultats requête avec deux tables
    Par ideal23 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/03/2007, 10h10
  2. affichage d'une valeur en relation avec deux tables
    Par mealtone dans le forum PHP & Base de données
    Réponses: 19
    Dernier message: 04/08/2006, 13h52
  3. Faire une procédure stockée avec deux tables
    Par mister3957 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/03/2006, 13h54
  4. Réponses: 8
    Dernier message: 13/03/2006, 17h37

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