Auto-fill formulier + rapport met gelijknamige waarden

Status
Niet open voor verdere reacties.

QuakinTom

Gebruiker
Lid geworden
7 okt 2011
Berichten
19
Goedendag,

Mijn kennis van Microsoft Acccess is enigszins roestig, maar toch red ik mij aardig. Ik wil een database maken waarin de rechten komen te staan van gebruikers. Stel er zijn 5 systemen in gebruik binnen het bedrijf en er zijn 3 gebruikers aanwezig (om het simpel te houden). Elke gebruiker heeft rechten per systeem (Full Control, Write, Read of No Access). Nu wil ik een rapport genereren waarin de rechten komen te staan van de gebruikers. Het rapport moet dus alle gebruikers laten zien plus de rechten. Elk rapport moet gevuld worden per systeem, in één rapport wil ik dus alleen de rechten van de gebruikers zien van één systeem.

Nu vroeg ik mij af hoe ik dit het beste kan doen. Is het een optie om dit te doen via een formulier met knoppen die per systeem een rapport genereerd of is het verstandiger om dit te doen met een drop down list in het rapport die een lijst van de systemen bevat?
Daarnaast heb ik de vraag hoe ik dan het beste mijn tabel(len) kan vullen om de data te bevatten voor het formulier en rapport. Ik heb nu namelijk per systeem een tabel gemaakt. Per tabel zijn de gebruikers aanwezig en staan de rechten genoteerd.

Ik maak gebruik van 2 formulieren. Het 1e formulier wil ik gebruiken om de rechten aan te passen van de gebruikers. Met behulp van de drop downbox wil ik dan een systeem selecteren en hier de rechten van zien en kunnen aanpassen. Het 2e formulier is voor het toevoegen van nieuwe systemen.

Mijn laatste vraag is hoe ik het formulier automatisch de rechten van de gebruikers laat pakken en vervolgens aan kan passen.

Graag hoor ik ideeën en/of oplossingen.
M.v.g.
Tom
 
Ik heb nu namelijk per systeem een tabel gemaakt. Per tabel zijn de gebruikers aanwezig en staan de rechten genoteerd.
Dat lijkt mij een érg onhandige constructie, die ook indruist tegen de normalisatieregels. Eén van de basisprincipes is dat je entiteiten die hetzelfde zijn (= systeemrechten in dit geval) bij elkaar in één tabel zet. Daarin heb je dus een GebruikerID, SysteemID en Rechten velden, met eventueel datums waarop die rechten verlopen of een wachtwoord verloopt.

Ik zou verder één rapport maken (rapport is immers voor elk systeem gelijk) en met een keuzelijst op een formulier het rapport openen met de gekozen waarde(n) als filter voor het rapport.
 
Dus eigenlijk bedoel je dat ik met 3 tabellen werk. Tabel 1 is voor de aanwezige gebruikers gekoppeld aan tabel 2 waar GebruikerID, SysteemID en Rechten velden in staan. Tabel 3 waar de aanwezige systemen in staan.

Maar hoe laat ik dan mijn formulier automatisch vullen met de data uit tabel 2 zodat ik gemakkelijk per gebruiker de rechten aan kan passen?
 
Je formulier is niet zo lastig. Ik zou inderdaad met minstens 3 tabellen werken: tblGebruikers, tblSystemen en tblGebruikers_Systemen. Je formulier baseer je op tblGebruikers_Systemen, en daarop maak je keuzelijsten om een gebruiker te selecteren, en een systeem.
 
De 3 tabellen heb ik nu gemaakt. Het enige probleem waar ik nu mee zit is dat ik een foutmelding krijg dat er dubbele waarden in mijn tabel zitten. In mijn tblGebruiker_Systemen wil ik namelijk het volgende laten zien:

Systeem|Gebruiker|Full Control|Write|Read|No Access
Systeem1-Gebruiker1-Ja-Ja-Ja-Nee
Systeem1-Gebruiker2-Nee-Nee-Ja-Nee
Systeem2-Gebruiker1-Nee-Ja-Ja-Nee

En dit kan niet omdat er dan een foutmelding komt vanwege dubbele waarden. Van deze tabel wil ik een rapport maken (geen probleem dit lukt mij wel) plus het rapport waar ik per gebruiker, per systeem de waarden aan kan passen.
 
Het probleem met de foutmelding over dubbele waarden is opgelost. Ik had een relatie verkeerd aangegeven. Nu wil ik alleen nog een formulier hebben waarin een drop downbox zit met de aanwezige systemen. Wanneer men dan op een knop drukt moet een rapport worden gemaakt waarin de rechten komen te staan van alle gebruikers voor het aangegeven systeem.
 
Dat formulier snap ik niet helemaal. Als je een (doorlopend of enkelvoudig) formulier maakt op basis van de systemen tabel, dan heb je ze toch allemaal? Kun je hooguit nog een keuzelijst op dat formulier maken als je er één op wilt kunnen zoeken als het er veel zijn. Maar die kun je simpel met de wizard maken. Mits het formulier is gebaseerd op een tabel of een opgeslagen query.
In een Enkelvoudig formulier kun je een meervoudig formulier maken waarin je alle gebruikers per systeem laat zien. In een doorlopend formulier kan dit (theoretisch) niet.
Met een knop op dat formulier kun je dan een rapport maken, en de wizard vraagt je dan ook of je het rapport wilt filteren met de geselecteerde record. En dat is weer precies wat je wilt.
 
Ja ok. Maar als ik mijn formulier maak op basis van de systementabel, hoe laat ik dat een rapport maken waar alleen de data in staat voor 1 systeem. Want als ik nu een rapport maak dan staan daar alle systemen in, zo krijg ik dus te veel data te zien. Door middel van dat formulier wil ik dan aangeven welke systeem je te zien krijgt in het rapport.
 
Lees de laatste zin van bericht #7 nog eens na :).
 
Ik kwam er even niet meer uit xD Nu heb ik dus een knop gemaakt en daar wil ik een WHERE-voorwaarde aan hangen. Volgens Access is de voorwaarde fout. Dit heb ik staan als voorwaarde:
DoCmd.OpenReport "rptSystemen_Gebruikers", , , "Systeem = " & RapportKeuzelijst

rptSystemen_Gebruikers is de naam van mijn rapport.
Systeem is het veld wat nodig is voor het filter.
RapportKeuzeLijst is de naam van mijn drop downlijst waar het systeem voor de filter in wordt geselecteerd.

Wat is hier fout aan? Of komt het er misschien door dat ik een nederlandse Office gebruik en de voorwaarde in het engels is?
 
Alles in VBA is in het Engels, dus daar heb je (nu) geen last van. De code zou dus in beginsel moeten kloppen. Al zou ik hem zelf zo hebben ingevoerd:
Code:
     DoCmd.OpenReport "rptSystemen_Gebruikers", , , "[Systeem] = " & Me.RapportKeuzelijst
Maar in essentie had je 'm dus wel goed, en zou hij moeten werken. Als je een foutmelding krijgt, is er dus iets mis met de voorwaarde. Ik zou een onderbrekingspunt maken (boven of op de DoCmd regel) en met <F8> door de code lopen. Voordat je de OpenReport laat lopen, hou je de muis even boven de tekst Me.RapportKeuzelijst zodat je kunt zien wat de geretourneerde waarde is. Die moet dan kloppen met de waarden in het veld [Systeem]. Als dat een numeriek veld is, en je filtert op een tekst, dan krijg je een foutmelding en moet je een andere waarde uit de keuzelijst inlezen.
 
De code die je mij hebt gegeven voer ik in als gebeurtenisprocedure bij de bijbehorende knop toch? Want als ik deze code als WHERE-voorwaarde in wil voeren bij opbouwfunctie voor macro's dan krijg ik de foutmelding dat de macroacter RapportOpenen een ongeldige waarde bevat.

Wanneer ik de code via de gebeurtenisprocedure invoer bij de knop dan opent Access Microsoft OneNote en laat hier een compleet rapport in zien. In dit rapport staan alsnog alle systemen en niet maar één zoals de bedoeling is. Wanneer ik de knop indruk op het formulier dan wordt er ook gevraagd om invoer. Terwijl deze invoer toch uit mijn drop-downlist moet komen waaraan de knop gelinked is?
 
Hebben we het over macro's, of over vba? Want bij macro's haak ik af :). En dit:
Wanneer ik de code via de gebeurtenisprocedure invoer bij de knop dan opent Access Microsoft OneNote en laat hier een compleet rapport in zien.
snap ik al helemaal niet! Ik heb het over een Access rapport, niet over OneNote.
 
Ja dat is het rare dus. Die regel met code voer ik in bij de knop. Dat kan je doen door middel van een zogenaamde "gebeurtenisprocedure". Dit is gewoon een simpel scherm waar je een regel code opgeeft die de knop gebruikt wanneer je op de knop klikt. Maar het rare is dus dat Microsoft Access uit zichzelf Microsoft OneNote opent. Nergens in de instellingen staat ook maar iets over OneNote. Deze koppeling verzint Access dus zelf.
 
Wellicht handig als je een db meepost, want dit snap ik niet helemaal. Ik heb nog nooit meegemaakt dat een opdracht om een intern Access rapport te openen het rapport opent in OneNote. Want ik neem niet aan dat je dat rapport in OneNote hebt gemaakt.
 
Nee het rapport laat ik gewoon maken door Access. Alleen mijn database is te groot om up te loaden op het forum. 100kb is toegestaan en de database in '.rar' extensie is 147kb.
 
Je kunt met winrar deelbestanden maken van 100kb. Dan heb je dus 2 bestandjes, en die kun je dan makkelijk uploaden.
 
Je kunt eens kijken of je het rapport hiermee kunt zien:
Code:
     DoCmd.OpenReport "rptSystemen_Gebruikers", acViewPreview, , "SysteemID = " & RapportKeuzelijst

Overigens heb je nog een ander probleem, en dat moet je sowieso ook oplossen voordat het gaat werken. En dat is: in de tabel [tblSystemen_Gebruikers] heb je een veld [SysteemID], en daar verwacht je als ontwerper dan een nuneriek veld te zien met een verwijzing naar het veld [SysteemID] uit de tabel [tblSystemen]. Je hebt echter een tekstveld met als inhoud het (tekst)veld [Systeem]. En dat gaat nooit werken. Je keuzelijst <RapportKeuzelijst> retourneert namelijk het veld [SysteemID], dus je moet je rapport ook filteren op [SysteemID].
Sowieso is de regel dat je tabellen altijd koppelt op basis van het sleutelveld uit de brontabel, en niet op een niet-geïndexeerd tekstveld uit die tabel.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan