Bonjour,
Sur un forum anglophone, je viens de répondre à une demande et j'aimerais vous faire partager ma solution.
La demande obtenir un nombre de lignes en fonction d'une quantité dans un enregistrement "maitre".
Même si je suggérais de plutôt faire le travail en amont par l'intermédiaire d'une table temporaire, il est possible d'utiliser un TFrxUserDataset et un état de type maitre détail.
Pour réaliser ça, il me fallait un jeu d'essai. Une requête sur une base de données Firebird
m'a fourni le nécessaire
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT CAST('LIGNE 1' AS VARCHAR(20)) DESCRIPTION,3 QTE FROM RDB$DATABASE UNION SELECT CAST('LIGNE 2' AS VARCHAR(20)),1 FROM RDB$DATABASE
un petit design simple (Delphi)
et un peu de code
M'ont permis de réaliser l'état suivant correspondant à la demande succincte de départ (pour peu de réduire la taille de la bande maître à une hauteur de zéro)
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 procedure TForm16.Button1Click(Sender: TObject); begin frxreport1.ShowReport(); end; // IMPORTANT frxUserDetail.RangeEnd:=reCount procedure TForm16.frxDBMasterFirst(Sender: TObject); begin frxUserDetail.First; frxUserDetail.RangeEndCount:=FDMaster.FieldByName('QTE').AsInteger; end; procedure TForm16.frxDBMasterNext(Sender: TObject); begin frxUserDetail.First; frxUserDetail.RangeEndCount:=FDMaster.FieldByName('QTE').AsInteger; end;
Attention encore une fois à bien mettre la propriété RangeEnd du TFrxUserDataset à reCount sous peine de vous retrouver dans une boucle sans fin
![]()
Partager