Bonjour,
Il y a beaucoup à dire !
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 
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
Select * from Créneau, adhérants where créneau.Mois = '''+x+''' and Créneau.numcarte = adhérants.numcarte
devient
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
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
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)
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
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)
Partager