Delphi - Csoportváltásos lista készítése egy SQL lekérdezésből

Nyomtatás a Rave komponensekkel 6. rész

forráskód letöltése
Ebben a részben készítünk egy SQL lekérdezést, amelyet az RvQueryConnection komponens segítségével ki is nyomtatunk. A nyomtatást során a lekérdezés eredménytáblájából egy csoportváltásos listát készítünk.
Kezdjünk egy új Delphi alkalmazást.
Helyezzünk el a Form-on egy Query objektumot. DataBaseName tulajdonságát állítsuk DBDEMOS-ra. Az SQL lekérdezés SELECT parancsát helyezzük el az SQL property-ben.
SELECT Orders.PaymentMethod, Customer.Country, SUM(Orders.AmountPaid)
FROM "Customer.db" Customer
INNER JOIN "Orders.db" Orders
ON  (Customer.CustNo = Orders.CustNo)
GROUP BY Orders.PaymentMethod, Customer.Country
Összetett lekérdezést alkalmazunk. A lekérdezés a Customer és Orders táblákból történik. Összesítjük a fizetési módokat és a hozzájuk tartozó összegeket, országonkénti bontásban.
A Query1 objektum Active tulajdonságának értékét állítsuk igazra.
Helyezzünk a Form-ra egy DataSource és egy DBGrid objektumot is. A DataSource DataSet értékét állítsuk Query1-re, a DBGrid DataSource értékét pedig DataSource1-re.
A lekérdezés tartalmának kinyomtatásához az RvProject és RvQueryConnection komponenseket használjuk. Helyezzünk el két ilyen komponenst a Form-on. Az RvQueryConnection1 objektum Query tulajdonságát állítsuk Query1-re.
Mentsük el munkánkat, majd kattintsunk duplán az RvProject1 objektumon. Ekkor elindul a Rave Visual Designer.
Válasszuk a File – New menüpontot, majd ha létrejött az új project, akkor kattintsunk a File – New Data Object menüpontra.
A Data Connections ablakban válasszuk a Direct Data View elemet. A következő ablakban válasszuk ki az RvQueryConnection1 elemet, majd nyomjuk meg a Finish feliratú gombot. Ezzel létrejött az adatkapcsolat az RvQueryConnection1 objektumon keresztül.
Válasszuk a Tools – Report Wizards – Simple Table menüpontot. A megjelenő ablakban válasszuk a DataView1 elemet, kattintsunk a Next feliratú gombra. A megjelenő mezőlistában válasszuk ki az összes mezőt. Ha végeztünk, nyomjuk meg a Next gombot.
A következő ablakban adjuk meg a Report címét, majd kattintsunk a Next gombra. Állítsuk be a Report elemek betűinek tulajdonságait, majd válasszuk a Generate feliratú gombot.
Létrejött a Report2 objektum. A Report1 objektumot töröljük a Project Tree-ben, hiszen felesleges.
A Report2 objektum tartalmát egy picit át kell alakítanunk. Töröljük le a PaymentMethod-ot megjelenítő mezőket. A maradék két mezőt (Country, SUM OF AmountPaid) és a hozzájuk tartozó fejléceket helyezzük el az oldalon úgy, hogy kitöltsék a rendelkezésre álló teret.
A Report palettáról helyezzünk el egy Band komponenst az oldalra. ControllerBand tulajdonságát állítsuk DataView1DataBand-re. A GroupDataView mező értékét állítsuk DataView1-re, a GroupKey-t pedig PaymentMethod-ra.
Kattintsunk duplán a BandStyle tulajdonságra. Megjelenik a Band Style Editor ablak, ahol beállíthatjuk a Band komponens típusát. A Print Location elemeknél jelöljük be a Group Header elemet, majd kattintsunk az OK gombra. Ezzel beállítottuk, hogy a Band1 objektum egy csoportfejléc legyen. A csoportok bontása a PaymentMethod mező értéke szerint történik.
Amikor csoportváltásos listát készítünk fontos, hogy a bontás alapját képező mező rekordjai rendezettek legyenek. A csoportbontás algoritmus ugyanis az egymás után következő egyforma elemeket sorolja egy csoportba.
A Band1 objektumon helyezzünk el egy DataText komponenst a Report palettáról. DataView tulajdonságát állítsuk DataView1-re, a DataField mező értékét pedig PaymentMethod-ra. A PaymentMethod mező értéke jelenik meg, mint a csoport fejléce.
A Band1 objektum alján helyezzünk el egy vízszintes vonalat is, hogy kiemelje a fejlécet a többi elem közül. A vízszintes vonalat a Drawing palettán találjuk, HLine néven.
Helyezzünk el egy újabb Band komponenst a lapon. Ha a példa lépéseit követtük, az objektum Band2 nevet kap. ControllerBand, GroupDataView és GroupKey tulajdonságait állítsuk be úgy, mint a Band1 esetében tettük. Kattintsunk duplán a BandStyle tulajdonságon. A megjelenő ablakban most a Group Footer elemet jelöljük be. Ezzel beállítottuk, hogy a Band2 csoport lábléc legyen.
Helyezzünk el rajta egy Text komponenst „Összesen:” felirattal. Font tulajdonságát állítsuk félkövérre.
A csoport láblécben összesítsük az egyes fizetési módok összegeit, azaz a SUM Of AmountPaid mezők értékeit. Ehhez válasszuk a Report paletta CalcTotal komponensét.
A komponenst helyezzük el a Band2 objektumon. Controller értékét állítsuk DataView1DataBand-re. A DataView mező értékét állítsuk DataView1-re, a DataField értékét pedig „SUM OF AmountPaid”-re.
A számítás eredményét egy változóba tároljuk el. A DestPIVar mezőbe írjuk be, hogy SZUM. Ez lesz annak a változónak a neve, amely az eredményt tárolni fogja. A változót a CalcTotal1 objektum hozza létre.
Hogy az eredmény formátuma megegyezzen a SUM Of AmountPaid mezőével, a DisplayFormat mezőbe írjuk be a következőt: #,##0.00.
A Band2-n helyezzünk el egy DataText objektumot. DataField tulajdonságában adjuk meg a következőt:
PIVar.SZUM+' Ft'
A SZUM változóra a fenti formában tudunk hivatkozni.
A számokat megjelenítő DataText objektumok FontJustify tulajdonságát állítsuk át pjRight-ra. Ekkor a számok jobb oldalra lesznek igazítva.
Mentsük el munkánkat project1.rav néven, ugyanabba a könyvtárba, ahová a Delphi alkalmazásunkat mentettük el. Zárjuk be a Rave Visual Designer-t, majd lépjünk vissza a Delphi-be.
Az RvProject1 objektum ProjectFile tulajdonságában adjuk meg a project1.rav állománynevet.
Helyezzünk el egy Button objektumot a Form-on. OnClick eseményébe írjuk be az alábbi kódot.
RvProject1.Execute;
Mentsük el az alkalmazást, majd próbáljuk ki.

Nyomtatás a Rave komponensekkel cikksorozat