Naplnění reportu daty Query while |
Top Previous Next |
Úspěšně jsem zvládl svůj první repor s daty - QueryToCells co dál? Nyní vyrobíme modifikaci tohoto reportu. Ukážeme si jak report naplnit tak, abychom si mohli vybrat, kde budou data umístěna a zkusíme některé buňky naformátovat a obarvit. Původní skript: procedure OnBeforeReport(Sender : TReportProperty); begin BDEQuery1.Query.Open; Sheet['B4'].QueryToCells:=BDEQuery1.Query; BDEQuery1.Query.Close; end;
vložil data od buňky B4 dále, ale nemohli jsme si vybrat kde budou jednotlivé fieldy umístěny, nyní skript upravíme tak, aby to bylo možné:
procedure OnBeforeReport(Sender : TReportProperty); var r : integer; begin Sheet.RowCount:=5; Sheet.ColCount:=5; r:=4; BDEQuery1.Query.Open; while not BDEQuery1.Query.eof do begin Sheet['B'+IntToStr(r)].Cells:=BDEQuery1.Query.FieldByName('jmeno').AsString; Sheet['C'+IntToStr(r)].Cells:=BDEQuery1.Query.FieldByName('pocet').AsString; inc(r); while Sheet.RowCount<=r do Sheet.AddRow; BDEQuery1.Query.Next; end; BDEQuery1.Query.Close; end;
Jeje, tolik kódu a report vypadá pořád stejně? Ano vypadá, ale nyní již můžeme měnit umístění buňek v reportu. Nejprve si report trochu okomentujeme. První 2 řádky Sheet.RowCount:=5; Sheet.ColCount:=5;
nám nastaví výchozí velikost reportu. Tím také zajistíme že se smaže i předchozí obsah buněk. Následně otevřeme Query a budeme jej procházet v cyklu dokud nenarazíme na konec. Následující řádek Sheet['B'+IntToStr(r)].Cells:=BDEQuery1.Query.FieldByName('jmeno').AsString; zajistí že do buňky [Sloupec B,řádek r] umístíme filed 'jméno' z Query. Podobně potom na dalším řádku i počet. Nyní si posuneme ukazatel aktuálního řádku o jedna inc(r); a otestujeme jestli počet řádků reportu je dostatečný pro další data while Sheet.RowCount<=r do Sheet.AddRow; hmmm proč while když by stačil if ? .... nestačil, protože teď jsi již zkusíme první, nejjednodušší, modifikaci reportu, zkuste místo inc(r); dát inc(r,2); s pustit report znovu. Podobně můžete třeba počet přemístit do sloupečku D: Sheet['D'+IntToStr(r)].Cells:=BDEQuery1.Query.FieldByName('pocet').AsString;
Nyní tedy report vypadá nějak takto:
počet výskytů jména v databázi je číslo a tedy by mělo být zarovnáno doprava. Do skriptu za řádek Sheet['C'+IntToStr(r)].Cells:=BDEQuery1.Query.FieldByName('pocet').AsString; přidáme Sheet['D'+IntToStr(r)].Format:=6; // Format
Jednoduché že? Ještě bychom mohli číslo obarvit a zvýraznit tučně. Abychom nemuseli stále opakovat Sheet['D'+IntToStr(r)]. využijeme konstrukci With: with Sheet['D'+IntToStr(r)] do begin Format:=6; Font.Color:=clNavy; // Font Font.Style:=fsBold; end;
Report tedy nyní vypadá:
Protože už máte všechny potřené vědomosti za domácí úkol modifikujte report tak aby vypadal: Potom můžete pokračovat v následujícím příkladu, kde vytvoříme graf ze zobrazených dat
|