Tvorba sestav - DataReport

Tak, a nyní je nejvyšší čas si ukázat, jak vytvářet trochu náročnější reporty pomocí sekce Group Header a vnořených RecordSetů. Otevřete si tedy DataEnvironment, založte nový RecordSet a nastavte jej následovně:

Nezapomeňte jako vždy nastavit správně LockType a CursorType. Tento RecordSet vybere jedinečné výskyty telefonních předvoleb v tabulce PSC. Nyní si připravíme vnořený RecordSet, který bude pomocí telefonní předvolby svázán s nadřízeným RecordSetem). Označte náš nově vytvořený RecordSet (sRep2) a použijte tlačítko Add Child Command. Založí se nový RecordSet, ale ne již přímo pod spojení CNN, ale bude podřízen RecordSetu sRep2. Základní vlastnosti nastavte následovně:

Nyní je nutné nastavit ještě relaci mezi vnořeným a rodičovským RecordSetem. Přepněte se na záložku Relation a v definici relace zvolte jak Parent Fields tak Child Fields pole TELPRED. Pak klikněte na tlačítko Add:

Takto by měl vypadat výsledek.

A teď k reportu. Abychom si ušetřili práci, tak nejprve náš již hotový report uložíme pod jiným jménem a pak ho upravíme. Takže klikněte v Project Exploreru pravým tlačítkem na rptRep1 a uložte jej jako rptRep2. Nyní jej otevřete a přejmenujte na rptRep2. Do projektu přidejte zpět rptRep1.

Nyní si upravíme rptRep2. Klikněte do jeho tiskové plochy pravým tlačítkem a použijte volbu Insert Group Header/Footer. Založí se nová sekce. Nyní klikněte na titulek celého reportu, aby se zobrazili vlastnosti celé sestavy. Jako DataMember nastavte sRep2. Do sekce Group Header přidejte RptLabel s popiskem "Telefonní předvolba" a jeden RptTextBox, jehož DataMember nastavte na sRep2 a DataField na TELPRED. Pod něj přetáhněte prvky, které jsou dosud v sekci Page Header - popisky i čáru:

Nesmíme zapomenout ještě také opravit prvky, které jsou v Sekci Detail. Stačí vždy jen vybrat prvek a změnit mu DataMember na sRep2c - pozor, ne sRep2, ale na vnořený RecordSet.

No a konečně ještě trochu upravíme ty počty záznamů - všechny prvky, které máte v sekci Report Footer přesuňte do sekce Group Footer a samozřejmě že je třeba změnit DataMember u RptFunction na sRep2c.

Nyní si na formulář přidejte další tlačítko a na jeho událost Click zapište:

Private Sub Command2_Click()

   rptRep2.Show vbModal

End Sub


Nyní pusťte projekt, klikněte na nově vytvořené tlačítko a divte se. Pokud jste vše udělali správně, potom budou vždy pro jednotlivé telefonní předvolby vypsány místa a na konci bude zobrazen počet záznamů pro danou telefonní předvolbu.

Nemyslete si, že u takto sestaveného reportu si nemůžeme hrát se zdrojovým RecordSetem. Pokud si necháte vypsat Source pro sRep2 tak zjistíte, že vypadá následovně:

SHAPE {SELECT DISTINCT TELPRED FROM PSC ORDER BY TELPRED} AS sRep2 APPEND ({Select * From PSC Order by MISTO} AS sRep2c RELATE 'TELPRED' TO 'TELPRED') AS sRep2c


My si jej samozřejmě můžeme upravit stejně, jako jsme to dělali v předchozím případě - jen bude ten výsledný SQL příkaz maličkato komplikovanější. Otevřete si formulář a na tlačítko, kterým voláte náš skupinový report zapište:

Private Sub Command2_Click()

   If DE.rssRep2.State = 1 Then
      DE.rssRep2.Close
   End If
   DE.rssRep2.Source = "SHAPE {SELECT DISTINCT TELPRED FROM PSC _
      Where TELPRED    LIKE '036%' ORDER BY TELPRED} AS sRep2 _
      APPEND ({Select * From PSC Order by    MISTO} AS sRep2c _
      RELATE 'TELPRED' TO 'TELPRED') AS sRep2c"
   DE.rssRep2.Open
   rptRep2.Show vbModal

End Sub

Nyní projekt opět spusťte a zkuste si vyvolat skupinový report. V něm nyní budou zobrazeny pouze ty skupiny míst, jejichž telefonní předvolba začíná 036. Rád bych Vás v tomto okamžiku upozornil na jednu věc - pokud možno se vyhněte modifikování druhé části dotazu, která vytváří vnořený RecordSet. Většinou ničeho nedosáhnete, jen budete vytočený, protože se Vám začnou kupit chyby.

Zpět Další

Autor: The Bozena