View Poll Results: Is dit handig?

Voters
6. You may not vote on this poll
  • Heel handig

    1 16.67%
  • Bruikbaar

    3 50.00%
  • Niet handig

    0 0%
  • Niet bruikbaar

    2 33.33%
Results 1 to 12 of 12

Thread: De Basis van FastRports

  1. #1
    Senior Member Antoine's Avatar
    Join Date
    Apr 2011
    Location
    Molenwaard
    Posts
    2,399

    De Basis van FastReports

    De basis van FastReporst

    Door Anthony Arend van der Vlugt

    In de bijlage dit bestand in *.pdf formaat, waar ook plaatjes in staan.

    Link naar pdf-bestand

    Bij het werken met databases komt natuurlijk al het een en ander om de hoek kijken. We moeten de werking weten van een DataSet, DataSource, Table enz. Persoonlijk adviseer ik de beginnende Delphi programmeur te kijken naar bijvoorbeeld het componentenpakket van ZEOS. Datacomponenten die gemakkelijk zijn om mee te werken en waar met verschillende protocollen kan worden gewerkt, zoals: MySQL, SQL, SQLite3, Acces enz.

    Voor het gemak nemen we een testproject, en vullen die met de volgende componenten:

    - DBNavigator
    - DBGrid
    - Button
    - ZTable
    - ZConnection
    - DataSource

    De Connection database is de database die je aangemaakt hebt met bijvoorbeeld SQLiteAdministrator. In de Database-property zet je het path van je db3-bestand. Als Protocol kies je sqlite-3. Je kan hierna de property connected op True, zetten.
    Daarna gaan we naar de Table. In property connection geef je de waarde ZConnection weer. In de property TableName geef je de tabel aan, bijvoorbeeld Adressen. Dan kan de property Active op True gezet worden.

    Dan volgt de Datasource. Het enige wat je behoeft te doen is de property DataSet de Table in te vullen, in dit geval: ZTable.

    Hierna is het niet moeilijk meer om de Data-aware componenten zoals je DBGrid en DBNavigator werkzaam te krijgen. Dit doe je door de property DataSource op Datasource te zetten. (De DataSource waar je mee werkt).

    Je ziet nu je DBGrid gevuld met de inhoud van je tabel Adressen.
    We gaan er nog wat componenten op zetten. Hiervoor moet je FastReport 4 hebben geinstalleerd, of de Demo-version. Aan het eind van dit artikel een paar linkjes die daar naar verwijzen.

    - frxDBDataSet
    - frxReport

    frxDBDataSet is een component die communiceert met je database, Daarvoor moet je de property DataSet een verwijzing geven naar je Table. In dit geval ZTable.
    Met het component frxReport, hoef je niets te doen. In ieder geval geen instellingen in je property[/i]s. We zijn nu aangekomen op het punt om een Report te maken. Er is daarvoor weinig of geen code nodig, bijna alles is instellen en proberen.

    Dubbelklik op het frxReport component, De compiler opent nu een programma, we noemen dit de Designer.
    Als het goed is ziet je nu een lege pagina, dit is in principe je report. Je kan dit testen door op de preview-button te klikken (Ctrl+P). Je ziet nu een report zonder inhoud. We gaan nu de instellingen zo zetten dat je je data uit je tabel in het testproject ziet in je report. Page1 is de naam van je pagina(report) Daar doen we geen instellingen in de property[/i]s. Ook de DataSet vullen we NIET!

    Aan de linkerzijde van het programma zie je een rijtje componenten klik op het componentje met de Bands . Kies hier voor ReportTitle. Op deze ReportTitle kan je tekst zetten die 1 keer als kop op je report getoond wordt. We gaan dit testen. Klik daarvoor op het component frxMemoView . Dit component plaats je op Band ReportTitle. Je ziet hier gelijk een MemoEditor openen, waar je tekst in kan zetten. En ook de grootte van de tekst. We kiezen voor een tekstgrootte van 18 punten en zetten de style op Bold. Bijvoorlbeeld: Adressenlijstje. De uitlijning laat ik over aan de creativiteit van je zelf. Als je nu voor preview kiest, zie je een report met de tekst 'Adressenlijstje'.

    We gaan nu proberen data weer te geven op je report. Dat doen we als volgt: Klik daarvoor weer op het componentje Bands . Kies daar voor een MasterData band. De property DataSet stel je in op frxDBDataSet. Sleep daarna één of meerdere MemoView[/i]s in de MasterDataBand, zoals hieronder te zien is. Deze MemoView[/i]s moeten ten eerste gekoppeld worden aan de frxDBDataSet. Dat doe je door deze in te voeren bij de property[/i]s van MemoView DataSet. Je kiest daar voor frxDBDataSet. Als je op de MemoView klikt of selecteerd kan je rechts van de MemoView op een soort dropdown boxje klikken, je kan zo makkelijk kiezen welk Field je wilt laten tonen. Zet alle MemoView[/i]s netjes naast elkaar. Allemaal moeten ze gekoppeld worden aan de frxDBDataSet, en ze moeten allemaal de Field laten zien die jij wilt laten tonen.

    Vervolgens plaatsen we er nog een PageFooter onder, om bijvoorbeeld het pagina nr. te laten tonen. Klik hiervoor opnieuw op het component Bands en kies hier voor PageFooter. Deze plaats je onder je MasterData-Band (kan trouwens niet anders).

    Rechts in je Designer zie je deze DataTree, je klikt hier op Var (Variabelen), hier kan je kiezen voor Page#. Klik er op en sleep deze naar je PageFooter. Je kan hem rechts zetten, of links, maar ook in het midden. Dit is een leuk component want deze houd bij hoeveel pagina[/i]s je hebt, en zet onderaan de pagina het pagina-nr.
    Er staan nog wat variabelen bij, bijvoorbeeld: Date (Laat de datum zien), Time (Laat de tijd zien), enz.

    Als je nu op Preview klikt, zie je je report, zoals die moet zijn. Dit report zit eigenlijk onder je component frxReport op je TestProject. Je hoeft het report in je designer in principe niet op te slaan. Je kan de designer nu sluiten en weer terug gaan naar je project. Nu wil je je report laten zien als je op de button klikt.

    Je had al een Button op je Form gezet, deze geef je de caption View. Dubbelklik op de button View en daar gaan we een regeldje code onder zetten, niet erg ingewikkeld, maar het moet om je report te laten zien. Dit is de code:

    Delphi Code:
    1. procedure TFRTest.ViewBtnClick(Sender: TObject);          
    2. begin
    3.    if frxReport1.PrepareReport then
    4.      try  
    5.        frxReport1.ShowPreparedReport;
    6.     finally
    7. end;

    Dat is alles! Sla je project nu op en compileer je project. Je kan nu je tabel wijzigen en weet ik wat er in voeren. Zodra je op View klikt, zal je report getoond worden, met de data uit je tabel.

    Een volgend artikel zal gaan over het maken van variabelen in je report, en het opslaan en openen van bestaande reports (fp3-bestanden) en wat meer over het design van je report. Hier volgen wat handige links naar de site van FastReport 4.

    Succes!

    http://www.fast-report.com/nl/ Homepage FastReport 4
    http://www.fast-report.com/nl/download/ Aanschaffen FastReport 4
    http://www.fast-report.com/en/forum/ Forum voor FastReport 4
    http://www.fast-report.com/en/documentation/ Documentatie FastReport 4
    Last edited by Marcel; 06-Jun-14 at 13:48.
    " De waarde van het leven is niet in geld uit te drukken "

  2. #2
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Eén opmerking. Je gaat altijd vanuit de ZTable. Dan zie je alleen maar de records van de tabel. Ook haal je alle records op, terwijl je eigenlijk een filter wilt zetten voor bepaalde records. Maak gebruik van ZQuery. Dan ben je flexibeler in het maken van je dataset. Als je basistabel codes bevat, die verwijzen naar een ander tabel, kan je dat in één query tonen op je rapport. Toont een netter resultaat.
    Dit report zit eigenlijk ‘onder’ je component frxReport op je TestProject
    Is dat alleen voor de basis versie van Fast Reports? Met de 'standard' version moet ik altijd een rapport met extentie fr3 opslaan en laden.
    Last edited by jkuiper; 20-Jan-12 at 18:17.
    Delphi is great. Lazarus is more powerfull

  3. #3
    Senior Member Antoine's Avatar
    Join Date
    Apr 2011
    Location
    Molenwaard
    Posts
    2,399
    Je hebt gelijk John, maar het is een testproject, vandaar dat ik even heel simpel de gebruikelijke Componenten op een form zet. Als het over reports gaat, ga ?¡k het in dit artikel niet hebben over DataSet's en derg. Ik verwacht dat degene die dit artikel gebruikt wel enige ervaring heeft mbt DataSet's en modules....

    En ja, in de Basis versie hoef je niet een report op te slaan, het tonen van je report doe je met bovenstaande code. Verder heb je in de basis versie géén mogelijkheid voor een soort user-designer. Maar dat heb ik dan ook niet nodig. Als je een report gemaakt heb kán je hem wel opslaan en later laden, maar het hoeft niet. Dan maak je je report en sla dit niet op, vervolgens sla je je project op en compileer je hem. Dan zit je report eigenlijk meegebakken in je exe-bestand.

    Welke versie heb jij eigenlijk? 4?

    Ik ge hierna nog wat dieper in over variabelen, ook dat gaat anders dan jij gewend bent....

    Hier is de oplossing wat betreft het 'maken' van variabelen in FastReport....

    Ik kom er nog op terug!

    gr Anton
    Last edited by Antoine; 20-Jan-12 at 17:09. Reason: wat vergeten
    " De waarde van het leven is niet in geld uit te drukken "

  4. #4
    TDigitalTrain user Hans Brenkman's Avatar
    Join Date
    Mar 2002
    Location
    Weert
    Posts
    1,861
    Quote Originally Posted by jkuiper View Post
    Is dat alleen voor de basis versie van Fast Reports? Met de 'standard' version moet ik altijd een rapport met extentie fr3 opslaan en laden.
    John, ik gebruik de FR Professional versie en dat kan daar ook maar hoeft niet. Ik heb op een report (TfrxReport) een property StoreInDFM (default True) zodat gemaakte reports (ook zonder deze op te slaan als *.fr3 bestand) bij het sluiten van de FR designer opgeslagen worden in het form (meestal een DataModule). Ik sla ze ook altijd extern op als aparte bestanden.
    Testen kan niet de afwezigheid van fouten aantonen, slechts de aanwezigheid van gevonden fouten.

    Het is verdacht als een nieuw ontwikkeld programma direct lijkt te werken: waarschijnlijk neutraliseren twee ontwerpfouten elkaar.

  5. #5
    TDigitalTrain user Hans Brenkman's Avatar
    Join Date
    Mar 2002
    Location
    Weert
    Posts
    1,861
    Quote Originally Posted by Antoine View Post
    Delphi Code:
    1. procedure TFRTest.ViewBtnClick(Sender: TObject);          
    2. begin
    3.    if frxReport1.PrepareReport then
    4.      try  
    5.        frxReport1.ShowPreparedReport;
    6.     finally
    7. end;
    @Antoine, wat doet je try-finally daar (wilde je misschien een try-exception implementeren) ?
    Testen kan niet de afwezigheid van fouten aantonen, slechts de aanwezigheid van gevonden fouten.

    Het is verdacht als een nieuw ontwikkeld programma direct lijkt te werken: waarschijnlijk neutraliseren twee ontwerpfouten elkaar.

  6. #6
    Senior Member Antoine's Avatar
    Join Date
    Apr 2011
    Location
    Molenwaard
    Posts
    2,399
    De code was wat uitgebreider ivm variabelen. Aangezien ik daar nu nog geen gebruik van maak in dit artikel had ik wat code weggehaald, stom genoeg heb ik deze laten staan... Maar gelukkig kan het geen kwaad....

    Ik ben bezig met een volgend artikel, maar dat is wel wat moeilijker (voor mij) en wellicht ook voor de beginnende programmeurs met mij, daarom moet het wel duidellijk en eenvoudig zijn! Maar even geduld, het komt eraan!

    gr Anton
    " De waarde van het leven is niet in geld uit te drukken "

  7. #7
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Quote Originally Posted by Hans Brenkman
    John, ik gebruik de FR Professional versie en dat kan daar ook maar hoeft niet
    Toch weer iets geleerd. Zie je, Antoine, wat een artikel allemaal kan doen
    Delphi is great. Lazarus is more powerfull

  8. #8
    Senior Member Antoine's Avatar
    Join Date
    Apr 2011
    Location
    Molenwaard
    Posts
    2,399
    ZUCHT... Heb ik toch nog ?¡éts te betekenen...
    " De waarde van het leven is niet in geld uit te drukken "

  9. #9
    Senior Member
    Join Date
    Jan 2002
    Location
    Nieuwlande, Nederland
    Posts
    612
    Ik wil opmerken dat ztable intern een sql query maakt die de waarden die je in de filter property opgeeft gebruikt in de where. En dat doet ie ook voor updates. Kortom de ztable is het perfecte voorbeeld.

  10. #10
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    (Ik zou de titel "fastreport4" maken, omdat fastreport3 (vanwege zijn opensourcing) nog veel in omloop is).

    Voor de rest zeker iets waar ik naar zal kijken. Ik ben een reporting maagd, en moet daar toch nog eens induiken.

  11. #11
    Senior Member Antoine's Avatar
    Join Date
    Apr 2011
    Location
    Molenwaard
    Posts
    2,399
    Ik moet me er weer even in gooien, ik wil namelijk ook even een artikel maken over het gebruik van variabelen. Dat is toch weer andere koek..

    Maar dat zien jullie tzt nog wel.

    gr
    " De waarde van het leven is niet in geld uit te drukken "

  12. #12
    Senior Member Delphiwizard's Avatar
    Join Date
    Dec 2006
    Location
    België
    Posts
    160
    Ik werk graag met fastreport 4, je kan er echt van alles mee.
    Zelf vind ik dat de data op een rapport zoveel mogelijk onafhankelijk moet zijn van de exe waarmee je het rapport aanroept, de data en verbinding met db, en queries en zo moeten op het rapport zelf staan.
    Dat maakt het onder meer mogelijk dat ik voor mijn software gebruikers een rapport kan maken, zij plaatsen het in een specifieke folder en kunnen het rapport gebruiken zonder nieuwe exe.

    Enkele weken geleden had ik nog een probleem in fastreport om een rapport te maken met vertikale lijntjes over de hele pagina, tot de footer dus, en niet enkel voor alle records in detaildata...vergde enig denkwerk maar het werkt.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •