Rapport op basis van formulier

chiellebeest

Gebruiker
Lid geworden
5 jan 2010
Berichten
99
Ik ben al een tijdje aan het proberen om op basis van een formulier een rapport te maken. Nu heb ik het zo, dat als je een rapport aanklikt (gefloten scheidsrechters en gefloten teams), de naam en eventueel start- en eind datum ingeeft.
Mooier is natuurlijk dat je de waarden in het formulier op geeft en op basis daarvan het rapport toont.
Ik heb 2 formulieren aangemaakt (rechter kant van menu). Helaas is het mij tot op heden niet gelukt om dit voor elkaar te krijgen. Hopelijk kan iemand mij op weg helpen, ook al is het maar met 1 van de 2, ga ik zelf proberen de 2e te maken.
 

Bijlagen

Rapporten maak je op basis van een tabel of een query, niet op basis van een formulier. Eventueel kan je voor een formulier en een rapport dezelfde query gebruiken.
 
Dat moet je in de basisquery voor je rapport aanpassen.
Voorbeeld gefloten: in je query heb je de parameters
Between [StartDatum] And [EindDatum]
Dit vervang je door de namen van de velden op het formulier dat de parameter waarden bevat
Between Forms![Gefloten teams]![Startdatum] and Forms![Gefloten teams]![Einddatum]
Hetzelfde principe gebruik je voor de andere parameters.
 
Blijkbaar hebben de twee helpers je database niet goed bekeken, of de vraag niet gelezen/begrepen. Al komt noella nog het dichts bij een bruikbare oplossing.

Ik los dit soort vraagstukken altijd op door de query die onder het rapport ligt aan te passen op basis van de gegevens die je in het formulier hebt gebruikt. Daarmee bereik je twee dingen: 1) het rapport opent met de gekozen waarden en 2) je hoeft nooit meer parameter velden in te voeren, omdat de laatst gebruikte gegevens al in het rapport zitten. Je kunt het rapport dus alleen veranderen via het formulier.

De hele constructie heb ik in het formulier Scheidsrechter gezet; je kunt hem vrij simpel aanpassen denk ik door de query uit het teams rapport te pakken en aan te passen conform de wijzigingen die ik heb aangebracht.

Nog een extra tip: je gebruikt geen 'voorvoegsel' in de objectnamen, en dat is bijzonder onhandig. Om te beginnen: hoe hou je de tabel 'Gefloten', de query 'Gefloten' en het rapport 'Gefloten' uit elkaar? Niet, lijkt mij. Daarom is het gebruikelijk om alle objecten een voorvoegsel te geven, zodat je dan de volgende objecten krijgt: 'tblGefloten', 'qryGefloten' en 'rapGefloten'. Of met één letter: 'tGefloten', 'qGefloten' en 'rGefloten'. Daarnaast gebruik je spaties in objectnamen, wat ook bijzonder onhandig is. Probeer dat ook te vermijden.
Laatste (eigenlijk overbodige tip als je mijn techniek gebruikt): definieer de parameters in de query, en gebruik ze niet zonder specs. Een datumveld moet je in je query als datumveld vastleggen, anders kan je ook tekst in dat veld intypen. En dat geeft uiteraard problemen!

Ik heb in de db een kopie van je rapport gemaakt en van je query, met de 'juiste' namen, zodat je oorspronkelijke rapport nog gebruikt kan worden.
 

Bijlagen

Ik heb, als ik het goed gedaan heb, de orginele query en het orginele rapport gekopieerd, hernoemd en opgeslagen qGeflotenPerTeam en rapGeflotenPerTeam.
Ik kan alle velden invullen, maar als ik op zoeken klik, gebeurt er niets. Ik heb het veld om te zoeken de naam cboGeflotenTeams gegeven, echter weet ik niet hoe ik deze definieer. Ik heb al gezocht hoe cboScheidsrechter gedefineerd is, maar die kan ik niet vinden. Ik zie deze wel staan, als ik deze selecteer, zie ik de opbouw niet.
 
Even voor de duidelijkheid: werkte mijn opzet bij jou dan niet? Want ik heb de werkende code in jouw menu ingebouwd, dus de knop op jouw formulier had gewoon moeten werken.
Als je vervolgens besluit om e.e.a. te hernoemen, wat uiteraard mag, dan moet je dat ook in de code aanpassen. In de VBA code wordt namelijk de naam van het te openen rapport, en de aan te passen query, met de juiste naam gebruikt. Als jij dan de query en het rapport hernoemt, dan werkt het natuurlijk niet meer.
 
tip: als je de veldnamen zoals deze op het formulier staan als criteria invult zoals ik uitlegde in bericht #3, heb je helemaal geen VBA nodig. De knop om het rapport te openen kan je dan gewoon met een wizard maken.
 
Nauwelijks een tip; sowieso is de werkwijze met criteria niet beter of sneller dan de mijne (zeker niet handiger), maar veel belangrijker: een database automatiseren doe je pas op het einde. De database is dan dus grotendeels klaar als je de gebruikersformulieren met knoppen en automatisering gaat maken. Normaal gesproken veranderen de namen van rapporten en formulieren dan ook niet meer. Namen tussendoor veranderen is dus behoorlijk zinloos, tijdrovend en frustrerend (want de knoppen werken niet meer).

Het kan zijn dat dat in België usance is, om regelmatig of om de haverklap een formulier een andere naam te geven zodat het niet meer werkt, maar hier bij ons dus niet. Mocht het wél zo zijn, dan graag een lijstje met voordelen van die procedure :).
 
Even voor de duidelijkheid: werkte mijn opzet bij jou dan niet? Want ik heb de werkende code in jouw menu ingebouwd, dus de knop op jouw formulier had gewoon moeten werken.
Als je vervolgens besluit om e.e.a. te hernoemen, wat uiteraard mag, dan moet je dat ook in de code aanpassen. In de VBA code wordt namelijk de naam van het te openen rapport, en de aan te passen query, met de juiste naam gebruikt. Als jij dan de query en het rapport hernoemt, dan werkt het natuurlijk niet meer.
Jouw code werkt zeker! Bij "gefloten scheidsrechters" (formulier scheidsrechters) daar heb je dit toegevoegd.

Ik heb zelf geprobeerd om de code aan te passen voor "gefloten teams", (formulier geflotenteams) maar dat lukt me niet. Hiervoor heb ik het orginele rapport en query gekopieerd en hernoemd naar rap**** en q****.
 
Het grote vordeel van Access is dat je snel een applicatie kan ontwikkelen zonder code te gebruiken. In dit geval zijn er 0 code lijnen nodig.
Wat wel waar is: automatiseren met formulieren doe je nadat de structuur goed zit. In dit geval zou ik de structuur van je tabellen eens nakijken voor je verder gaat, anders kan je daar later op vastlopen
vb.:
- je hebt 2 tabellen met de zelfde type gegevens: EmailAdressenKader en EmailVeldenKleedkamer
- je hebt heel wat tabellen (Scheidsechters, Email, Teams kort, ...) zonder PK
- je SI-excel-export tabel heeft 3 teams velden, geen PK ?
 
Ik heb zelf geprobeerd om de code aan te passen voor "gefloten teams", (formulier geflotenteams) maar dat lukt me niet.
Ik zal morgen even naar de andere variant kijken. De laatste opmerkingen van noella zijn an sich correct; tabellen zonder sleutels en relaties werken niet echt handig. Zelf ging ik er vanuit dat je even snel een kopie had gemaakt met dummy records, en dat je échte database wél technisch correct is opgebouwd. Neemt niet weg dat je dubbele tabellen met identieke entiteiten (mailadressen bijvoorbeeld gewoon in één tabel moet houden. Anders ga je jezelf behoorlijk in de vingers snijden bij het jezelf in de weg zitten:).
 
Het grote vordeel van Access is dat je snel een applicatie kan ontwikkelen zonder code te gebruiken. In dit geval zijn er 0 code lijnen nodig.
Wat wel waar is: automatiseren met formulieren doe je nadat de structuur goed zit. In dit geval zou ik de structuur van je tabellen eens nakijken voor je verder gaat, anders kan je daar later op vastlopen
vb.:
- je hebt 2 tabellen met de zelfde type gegevens: EmailAdressenKader en EmailVeldenKleedkamer
- je hebt heel wat tabellen (Scheidsechters, Email, Teams kort, ...) zonder PK
- je SI-excel-export tabel heeft 3 teams velden, geen PK ?
Dit heeft deels te maken met de tabel sl-export, deze komt uit SportLink als *.txt bestand. B.v. K.N.V.B. scheidsrechters worden anders geëxporteerd (voorletters en de achternaam,) dan vereniging scheidsrechters (achternaan en voornaam), Als ik dus gegevens uit deze tabel gebruik, staat het vreemd op mijn rapport, Ik heb de tabel scheidsrechters gemaakt, om dat "om te bouwen". Ook zo geldt dat voor de tabel teams kort, hiermee bouw ik uit de SL-export tabel een kolom om, zodat deze netter op mijn rapport komt. Mss dat het idd op een andere manier kan...

Ik gebruik de email tabellen als mailinglist, ik zal eens kijken of ik deze kan samenvoegen. De emailadressen in deze tabellen krijgen verschillende rapporten gemaild.
 
Bij gegevens uit verschillende bronnen met verschillende opmaak die in essentie in dezelfde tabel thuishoren, moet je het systeem zo bouwen dat die gegevens ook op de juiste manier ingelezen kunnen worden. Dit is doorgaans werk voor de wat gevorderde database bouwer. Als je dat niet zelf kunt, moet je niet gaan prutsen met extra tabellen (met dus de verkeerde indeling) want dat maak je de problemen voor je zelf alleen maar groter.
Aparte email tabellen zijn ook zeker niet nodig, als de bron tabellen op or de zijn. Gebruik bij voorkeur queries om e.e.a. te regelen.

Eigenlijk zou je voor de hele structuur van je de een aparte vraag moet en maken, waar bij je, naast de de, ook de importbestanden (de .txt files) meestuurt, zodat we daar mee kunnen werken. Want eigenlijk zou je dus een importfunctie moeten hebben waarmee je nieuwe records kan toevoegen. Waarbij je dat ookmeen controle inbouwt op dubbele records. Die zijn leuke klussen op de tanden in te zetten, dus daar wil in best naar kijken.
 
Omdat je zelf het best weet wat je nodig hebt/wilt zou ik toch eerst kijken om het zelf te doen. Er is op het internet genoeg info te vinden betreffende de basisprincipes. De site van Microsoft zelf is een goede start: MS access database design
Als je het zelf doet is het ook gemakkelijker om later aan te passen. Bij vragen kan je natuurlijk altijd hier terecht.
 
Bij gegevens uit verschillende bronnen met verschillende opmaak die in essentie in dezelfde tabel thuishoren, moet je het systeem zo bouwen dat die gegevens ook op de juiste manier ingelezen kunnen worden. Dit is doorgaans werk voor de wat gevorderde database bouwer. Als je dat niet zelf kunt, moet je niet gaan prutsen met extra tabellen (met dus de verkeerde indeling) want dat maak je de problemen voor je zelf alleen maar groter.
Aparte email tabellen zijn ook zeker niet nodig, als de bron tabellen op or de zijn. Gebruik bij voorkeur queries om e.e.a. te regelen.

Eigenlijk zou je voor de hele structuur van je de een aparte vraag moet en maken, waar bij je, naast de de, ook de importbestanden (de .txt files) meestuurt, zodat we daar mee kunnen werken. Want eigenlijk zou je dus een importfunctie moeten hebben waarmee je nieuwe records kan toevoegen. Waarbij je dat ookmeen controle inbouwt op dubbele records. Die zijn leuke klussen op de tanden in te zetten, dus daar wil in best naar kijken.
Thx voor je bericht, ik wil het zeker zelf proberen, daar kan ik alleen maar van leren. Het import bestand komt als *.txt, deze wordt automatisch in Excel geopend, hier laat ik een macro "overheen" lopen om alvast e.e.a. aan te passen. Deze sla ik dan op als *.xlsx en lees deze in Access in. Er zit wel een uniek veld in (wedstrijdnummer), in eerste gebruikte ik deze om dubbele wedstrijden uit te sluiten. Echter is het zo, dat b.v. een wedstrijd die verplaatst of afgelast wordt, het zelfde nummer houdt (behalve bij oefenwedstrijden, hier wordt vaak een standaard nummer aangegeven). Deze wedstrijd werd dan bij een nieuwe import niet meegenomen, omdat de unieke sleutel al bestond.
Ik heb destijds niet de moeite genomen om uit te zoeken of het mogelijk is om de reeds bestaande wedstrijd te overschrijven met de verplaatste wedstrijd of dat ik de keus krijg of een record wel of niet overschreven moet worden (in geval van oefenwedstrijd) maar geen unieke sleutel aan te wijzen.

Ik heb al wel 1 tabel kunnen verwijderen, de aanpassingen in deze kolom heb ik in de excel macro verwerkt.

Tussen kerst en oud-nieuw heb ik 2 weken vrij, mss dat ik dan een nieuwe database op basis van de huidige ga bouwen, kan ik daar "schoon" beginnen.
 
Ik snap eerlijk gezegd de tussenstap in Excel niet; volgens mij kan je het hele importproces gewoon in Access regelen. Nu doe je m.i. (gedeeltelijk) dubbel werk. En heb je dus twee programma's nodig i.p.v. één. Maar goed, ik vermoed dat het je uit de kroeg en van de straat houdt :).
 
Het weerhoud me niet om niet naar de kroeg te gaan, ff de frustratie wegdrinken omdat het niet lukt ;). Ik pas in Excel enkele kolommen aan, o.a. vervang ik wat waardes. Ik zou niet weten hoef dat in Access moet en of dat überhaupt in Access kan. Ben inmiddels al wat verder gevorderd, heb een formulier gemaakt op basis van het formulier wat jij hebt gemaakt voor "gefloten scheidsrechters". Ik krijg nu een foutmelding (zie bijlage), die ik er helaas niet uit krijg.
 

Bijlagen

  • MSACCESS_O50Bs5wLQX.png
    MSACCESS_O50Bs5wLQX.png
    37,8 KB · Weergaven: 3
Zijn het veld TK.Team en cboTeam allebei wel Tekst? Anders heb je inderdaad een probleem. Zet de string anders eens in een Inputbox, zodat je hem kunt testen in een query, of hier kunt laten zien wat er in staat.
 
Weer aan het klussen geweest, ik heb de fout eruit, krijg nu het (bijna) gewenste rapport eruit met onderstaande code
Code:
    Set qDef = CurrentDb.QueryDefs("qGeflotenPerTeam")
    strSQL = "SELECT SL_EX.Team, SL_EX.Wedstrijddatum, SL_EX.Tijd, REF.Naam, SL_EX.Thuisteam, SL_EX.Uitteam, SL_EX.[Soort wedstrijd], TK.Afkort, SL_EX.Thuis, SL_EX.[Uit] " _
        & "FROM ([Sl-excel-export] AS SL_EX LEFT JOIN Scheidsrechters AS REF ON SL_EX.Scheidsrechter = REF.Sportlink) " _
        & "INNER JOIN [Teams kort] AS TK ON SL_EX.Team = TK.Team " _
        & "WHERE (SL_EX.Wedstrijddatum Between CDate(" & CDbl(Me.Startdatum) & ") And CDate(" & CDbl(Me.Einddatum) & ") And TK.Afkort = """ & Me.cboGeflotenTeams & """) " _
        & "ORDER BY SL_Ex.Wedstrijddatum;"
    qDef.SQL = strSQL
    DoCmd.OpenReport "rapGeflotenPerTeam", acViewPreview

Enige wat ik niet voor elkaar krijg, is dat ik alleen wil zien waar het thuis team een bepaalde waarde bevat. Ik heb bij "WHERE" als van alles geprobeerd, maar krijg constant een foutmelding.
 
Terug
Bovenaan Onderaan