Results 1 to 7 of 7

Thread: Rapportage queries

  1. #1

    Rapportage queries

    Hallo hallo,

    In mijn applicatie heb ik diverse queries nodig voor rapportage doeleinden. Nu kan ik natuurlijk alle queries+datasets designtime aanmaken, maar ik vraag me af of er betere/flexibelere manieren zijn om hier mee om te gaan?

    Ik heb er al aan gedacht om alle queries in een database te plaatsen en afhankelijk van het soort rapport bepaalde datasets beschikbaar te stellen tijdens het ontwerp/genereren van het rapport. Op zich lukt dit aardig alleen loop ik vast op de relaties die er tussen bepaalde queries binnen een rapport zijn.

    Heeft iemand misschien tips/suggesties hoe ik dit aan kan pakken.

    Bij voorbaat dank!

  2. #2
    Ik gebruik in mijn programma als 'rapportgenerator' een memoveld (voor de SQL) en slechts één TIBQuery/TDataSource met een TDBGrid. In het memoveld kan zelf een SQL getikt worden maar deze kan ook samengesteld worden of online bij mij opgehaald worden uit een tekst-bestand op mijn server (voor de wat ingewikkeldere SQL's). Maar de queries in de database plaatsen is natuurlijk ook een optie.

    Ik begrijp jouw vraag alleen niet... "relaties die er tussen bepaalde queries zijn"?
    Je zou toch gewoon alles in één SQL kunnen zetten met JOIN's en UNION's?

  3. #3
    Ik begrijp jouw vraag alleen niet... "relaties die er tussen bepaalde queries zijn"?
    Stel dat ik drie tabellen heb: factuur, factuur regel en factuur regel BTW waarbij je tussen factuur en factuur regel een parent-child relatie hebt en ook tussen factuur regel en factuur regel btw. Als ik het rapport designtime maak dan maak ik hier ook drie queries aan die ik dan op de juiste wijze koppel. Als ik dit runtime wil doen zal ik ergens die relatie tussen de queries moet vastleggen.

    Maar als ik je goed begrijp zeg je dat ik gewoon een grote join moet maken van factuur, factuur regel en factuur regel BTW?

  4. #4
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Ik bouw mijn datasets op d.m.v. van memdatasets. Daar heb ik een class voor geschreven. De dataset wordt gevuld met gegevens van één of meerdere queries.
    Meerdere datasets kan ik gebruiken voor master / detail relatie in mijn rapporten.
    De velden van de memdatasets bouw ik op d.m.v. een tabel in mijn database.
    Delphi is great. Lazarus is more powerfull

  5. #5
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Quote Originally Posted by luigi View Post
    Maar als ik je goed begrijp zeg je dat ik gewoon een grote join moet maken van factuur, factuur regel en factuur regel BTW?
    Dat is ook een mogelijkheid. Met FR kan je werken met GroupHeaders.
    Delphi is great. Lazarus is more powerfull

  6. #6
    Quote Originally Posted by luigi View Post
    Als ik het rapport designtime maak dan maak ik hier ook drie queries aan die ik dan op de juiste wijze koppel. Als ik dit runtime wil doen zal ik ergens die relatie tussen de queries moet vastleggen.
    Ja, dat kun je ook runtime doen. Maar omdat, als je zelf al verschillende queries (en SQL) vast zet in je programma, dan kun je dat net zo goed designtime doen.

    En als je het helemaal variabel wil maken met elke denkbare SQL dan moet je van het idee van master/detail afstappen of gaan werken met een echte rapport-generator zoals FR.

    Maar als ik je goed begrijp zeg je dat ik gewoon een grote join moet maken van factuur, factuur regel en factuur regel BTW?
    Ja, ik doe dat dan met joins en unions.

    SQL Code:
    1. SELECT a.factuurnummer, b.subregel, b.bedrag
    2. FROM factuur a
    3. LEFT JOIN b ON b.factuurnummer=a.factuurnummer

    Als je dan ook totalen wilt hebben wordt het wat moeilijker en moet je met unions gaan werken.

    SQL Code:
    1. SELECT a.factuurnummer, 1, b.subregel, b.bedrag
    2. FROM factuur a
    3. LEFT JOIN b ON b.factuurnummer=a.factuurnummer
    4.  
    5. union ALL
    6.  
    7. SELECT a.factuurnummer, 2, sum(b.bedrag)
    8. FROM factuur a
    9. LEFT JOIN b ON b.factuurnummer=a.factuurnummer
    10.  
    11. union ALL
    12.  
    13. SELECT a.factuurnummer, 3, '------- scheiding ------'
    14. FROM factuur a
    15.  
    16. ORDER BY 1, 2

    Bovenstaand gewoon even uit de vuist getikt dus onderhevig aan fouten

    Een echte rapportgenerator geeft je natuurlijk veel meer vrijheid om ingewikkelde lijsten te maken die je met een enkele DBGrid niet kunt maken. Maar voor mij geeft de mogelijkheid van het zelf maken van SQL weer enorme vrijheid (je hoeft niet te gaan klungelen met een generator en sjabloon om een semi-ingewikkelde SQL-lijst te maken).

  7. #7
    In eerste instantie dacht ik dat mijn rapporten vrij simpel waren en allemaal min of meer hetzelfde. Ik realiseer me nu dat mijn/de werkelijkheid iets complexer is dan dat ik me in eerste instantie had voorgesteld. Zo had ik bijvoorbeeld geen rekening gehouden met "totalen". Ik heb dan ook besloten om voor verschillende rapport typen een eigen klasse te maken voor wat betreft de data die beschikbaar is voor een rapport. Op deze manier kan ik het zo gek maken als ik zelf wil

    Bedankt voor alle feedback het heeft me ontzettend veel geholpen!

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
  •