Gegevens gebruiken van ingelogde medewerker

Status
Niet open voor verdere reacties.

Freddy Fireman

Gebruiker
Lid geworden
19 jan 2009
Berichten
33
Ik heb een probleempje met een formulier

Ik heb een Db voor de zorg, waarin medewerkers kunnen inloggen op gebruikersniveau. Nu kan de ingelogde medewerker in een Form een nieuwe rapportage aanmaken voor de cliënt waar hij/zij geweest is. [RapportageId], [CliëntId], [Datum/Tijd], [Muteerder], [Rapportage]. Nu moet die medewerker een extra handeling uitvoeren bij muteerder door zelf in de keuzelijst zijn naam te selecteren, dat hij diegene is die rapporteert op dit tijdstip en datum. Ik krijg daar best veel klachten over waarom dit niet automatisch verloopt. Nu zou ik dus graag zien dat wanneer hij/zij inlogt, zijn naam automatisch gekoppeld wordt aan de nieuwe rapportage als hij/zij deze aanmaakt op het betreffende tijdstip en datum. Kan dit, bijvoorbeeld met code, sql of DLookUp?

mvg
Freddy
 
Nu kan de ingelogde medewerker in een Form een nieuwe rapportage aanmaken
Of je werkt met de Engelse versie, en dan werk je met Forms en Reports, ofwel met de Nederlandse versie en dan heet het Formulieren en Rapporten. Ik heb er z'n hekel aan dat mensen de taal misbruiken :).
Maar het kan uiteraard wel wat je wilt, afhankelijk van hoe je de gebruikersnaam gebruikt/opslaat. Je kunt bijvoorbeeld de gebruikersnaam bij het starten van de db opslaan in een TempVar, en bij het openen van het formulier de Tempvar waarde toewijzen aan de keuzelijst.
 
Hoi

sorry inderdaad formulier i.p.v. Form, hoef je me niet voor te haten hoor:confused:. Maar zonder gekheid. Als de medewerker inlogt wordt middels een toevoegquery zijn naam en datum/tijd gelogd in de tabel tblAangemeld. Als zij zich afmelden schrijft hij een log weg in tblAfmelden, werkt goed op zich.

Ik wil dus van de keuzelijst af en dat automatisch zijn naam als muteerder wordt gekoppeld aan de rapportage. Moet ik hiervoor een code zetten in VBA of moet ik criteria invullen bij de rapportagequery , heb je een idee voor mij?

Met dank
Freddy
 
Als je van de keuzelijst af wilt, is het nog veel simpeler. Maak een tekstveld, en zet bij de gebeurtenis <Bij Aanwijzen> deze code:
Code:
Private Sub Form_Current()
    Me.Gebruiker = VBA.Environ("UserName")
End Sub
 
Bedankt, is een goede code en gaat in de richting wat ik wil, maar nu pakt hij de Username die ingelogd is op Windows en niet diegene die ingelogd is in de database. Medewerkers hebben geen eigen windows acount maar een algemene acount van de afdeling, dus dat gaat niet werken.

gebruikersnaam bij inloggen is een keuzelijst gebaseerd op een query: TabelMedewerkergegevens_Query, waarin de samengevoegde naam (Expr1) zichtbaar is en niet zichtbaar het wachtwoord, die gebruikt wordt om een controle uit te oefenen met een Like event met een ander tekstveld als hij/zij het wachtwoord intypt.

Voor het gemak de tblAanmelden uitgelegd, misschien dat je daar wat mee kan, ik weet het niet hoor:

[MedewerkerId], [Datum/Tijd], [Status], [Expr1]: Status geeft de tekst aangemeld en Expr1 is de samengevoegde naam van de medewerker (achternaam, tussenvoegsel en voornaam)

Met dank
Freddy
 
Ik heb zo'n rijke baas, bij ons heeft iedereen een eigen werkplek :). En dan is de gebruiker van de database automatisch ook de persoon die is ingelogd. Maar als je wat anders wilt, kan dat dus met de TempVar. Die vul je dan tijdens het aanmelden en lees je (op dezelfde manier) uit op het formulier.
 
Bedankt,

Ik ben alleen niet bekend met Tempvar?

Verandert dan ook de VBA code zoals je hem beschreef

Voor mijn database had ik de code van jou :

Private Sub Form_Current()
Me.Muteerder = VBA.Environ ("UserName")
End Sub

Met dank
 
TempVars zijn inderdaad nieuw vanaf 2007. In dat geval kun je ook uit de voeten met Public variabelen. Die declareer je dan in een algemene module als volgt:
Code:
Public UserName as String
En die kun je dan vullen met wat je maar wilt. Werkt verder op vergelijkbare manier als een TempVar. Waarvan je niet weet wat het doet :).
 
Ik heb nog nooit een module aangemaakt hoe vul ik onderstaande dan? Ik neem aan dat UserName in mijn geval Medewerker wordt?

Public UserName as String
En dan??


Hoe zorg ik dan vervolgens hoe het tekstvak gevuld wordt in het rapportageformulier

Zoiets als:
Private Sub Form_Current()
Me.Muteerder = Module???
End Sub
 
Een module maken is simpel: in het VBA venster (ALt>+<F11> kies je <Invoegen>, <Module>. Meer is het niet. Daar plak je de regel die in post #9 staat. Bij het inloggen moet je de variabele dan wel vullen (UserName = Inlognaam die uit inlogprocedure komt). En je formulier wordt dan:
Code:
Private Sub Form_Current()
     Me.Muteerder = UserName
End Sub
En ook al zijn het maar 3 regeltjes: probeer code op te maken met de CODE tags :)
 
Ik laat het even rusten, ik begrijp er geen snars van:( Ik kan hem helaas niet posten i.v.m gegevens
 
Als je de code post die je nu gebruikt om de gebruiker te verifiëren, kan ik hem wel op afstand 'voorkoken' voor je. Je moet dan alleen zelf de module maken, of, mag uiteraard ook, de Public variabele in een bestaande module te zetten. Zodra de variabele is gedeclareerd, en hij is Public, kun je hem overal vullen en opvragen. En juist dat 'overal' is een klein beetje tricky, omdat je dus nooit de volledige controle hebt over die variabele. Maar dat maakt op zich niet zoveel uit.

1. Je maakt een Public variabele in een algemene (nieuwe of bestaande) module
2. Je vult de variabele met de gebruikersnaam (of ID) tijdens de inlogprocedure. De variabele bevat dan het PersoneelsID of de naam
3. Je zet de waarde van de variabele in het tekstvak van het rapport, of een ander formulier. Net wat je wilt. Zolang je de waarde niet verandert, blijft de waarde bewaard.

Dus het is niet zo heel veel anders dan een variabele declareren en vullen. En hoe die heet? Ach, what's in a name.... mag alles zijn!
 
De gebruikersnaam (inlognaam) = Medewerker (zo heet de keuzelijst met invoervak als de persoon inlogt op het inlogformulier)

de gegevens voor deze keuzelijst zijn gebaseerd op een query genaamd TabelMedewerkergegevens_Query en heet de medewerker expr1 i.v.m samenvoegen van zijn/haar NAW gegevens en MedewerkerId

Ik had geprobeerd om je code te gebruiken maar ik blijf haken op onderstaande, doet namelijk niets omdat ik het uiteraard verkeerd doe en niet begrijp

Code voor module:
Public UserName as String (Wordt UserName dan Expr1 of MedewerkerId)?

Code voor Tekstvak Muteerder op rapportageformulier
Private Sub Form_Current()
Me.Muteerder = UserName (Is dit de naam van de module of de naam van de variabele)?
End Sub

Moet ik de module gewoon module1 noemen en dan het tekstvak in het formulier koppelen aan die module? Of zit ik nu op een dwaalspoor?
 
Namen zijn totaal niet interessant in dit proces, zolang jij maar weet wat wat is. Persoonlijk vind ik een veld Expr1 niet de meest onderscheidende naam, maar als die voor jou betekenis heeft: gebruik hem! Een variabele heeft een naam, een veld heeft een naam, en een module heeft ook een naam. Kijk maar naar de eigenschappen van de module, of de naam die je ziet staan in het overzicht. Namen van modules gebruik je overigens niet, dus hoe de module heet is echt totaal niet interessant. Maar, voor jouw informatie, je module zal ongetwijfeld Module1 heten. Waar het om gaat, en wat ik nog steeds niet zie, is hoe je de variabele UserName vult. Dat doe je nog steeds niet (net zo min trouwens als de CODE knop gebruiken, maar dit terzijde). Je voert dus stap 1 uit, en stap 3. Vraag is dus: wat doe je in stap 2?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan