Ik zit met een (het is geen probleem want het werkt) ongemakkelijk stukje werk in MS Access.
Ik heb een hekel aan applicaties/databases waarop je moet inloggen want de mens heeft al genoeg wachtwoorden om te onthouden.
Ik heb dus een database die kijkt naar de gebruikersnaam waarmee je inlogt op het werkstation. Het is een hele aardige functie "=fOSUserName()" wat in een module staat en het werkt echt heel mooi. Omdat je niet meer met een Access workgroup hoeft te werken kun je ineens heel gemakkelijk rechten toekennen op basis van een tabel in de database, precies wat ik wil.
Alleen heb ik iets wat ik nogal jammer vind en waar ik vanaf wil.
Een situatieschets:
Je opent de database en een hidden form opent (gestart met een macro genaamd Autoexec).
Op dit formulier staat een tekstvak met als standaard waarde "=fOSUserName()". Deze wordt, zodra het formulier wordt geopend, gevuld met jouw gebruikersnaam.
Wanneer dit formulier geopend wordt, wordt er dmv OnLoad() een macro gestart die een query uitvoert en kijkt of de gebruikersnaam voorkomt in een tabel en een formulier opent op basis van de gegevens die deze heeft kunnen vinden.
Het formulier opent met een mededeling "Hallo [voornaam] [achternaam]" en er staat één knop met een macro erachter. Klik erop en de hidden form zal samen met het welkomscherm gesloten worden en een ander formulier zal vervolgens worden geopend.
Dit is de Vbcode achter "=fOSUserName()":
Wat ik nu wil is dit:
Ik wil dat het welkomscherm wordt geopend en meteen dmv "=fOSUserName()" de gebruikersnaam pakt en meteen de query wordt uitgevoerd en deze gegevens in datzelfde welkomscherm gooit. Dit alles met het openen van één formulier, ik heb nu van alles geprobeerd en ik kan nog maar één ding doen (volgens mij) en dat is een hele ranzige manier wat er niet uitziet omdat ik dat dmv een macro het welkomscherm open, gebruikersnaam grabbelt, formulier sluit, query draait en het formulier weer opent.
Alleen een gek zou zoiets doen en dus zoek ik naar een andere oplossing.
Kunnen jullie mij een zetje in de goede richting helpen? Ik hoop erachter te komen hoe het makkelijk kan want "=fOSUserName()" is retehandig maar als je een persoonlijke mededeling wilt geven op basis van deze functie dan kom ik niet veel verder dan de hierboven beschreven omweg. Google laat mij in de steek wat dit betreft omdat er veel staat beschreven maar niets waar ik iets aan heb omdat het allemaal over het loggen van gebruikersnamen gaat en dergelijke.
Ik ben al vanaf vorige week vrijdag bezig om het netter te krijgen maar ik zie het allemaal niet meer.
Ik heb een hekel aan applicaties/databases waarop je moet inloggen want de mens heeft al genoeg wachtwoorden om te onthouden.
Ik heb dus een database die kijkt naar de gebruikersnaam waarmee je inlogt op het werkstation. Het is een hele aardige functie "=fOSUserName()" wat in een module staat en het werkt echt heel mooi. Omdat je niet meer met een Access workgroup hoeft te werken kun je ineens heel gemakkelijk rechten toekennen op basis van een tabel in de database, precies wat ik wil.
Alleen heb ik iets wat ik nogal jammer vind en waar ik vanaf wil.
Een situatieschets:
Je opent de database en een hidden form opent (gestart met een macro genaamd Autoexec).
Op dit formulier staat een tekstvak met als standaard waarde "=fOSUserName()". Deze wordt, zodra het formulier wordt geopend, gevuld met jouw gebruikersnaam.
Wanneer dit formulier geopend wordt, wordt er dmv OnLoad() een macro gestart die een query uitvoert en kijkt of de gebruikersnaam voorkomt in een tabel en een formulier opent op basis van de gegevens die deze heeft kunnen vinden.
Het formulier opent met een mededeling "Hallo [voornaam] [achternaam]" en er staat één knop met een macro erachter. Klik erop en de hidden form zal samen met het welkomscherm gesloten worden en een ander formulier zal vervolgens worden geopend.
Dit is de Vbcode achter "=fOSUserName()":
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| Private Declare Function apiGetUserName Lib "advapi32.dll" Alias _
"GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Function fOSUserName() As String
Dim lngLen As Long, lngX As Long
Dim strUserName As String
strUserName = String$(254, 0)
lngLen = 255
lngX = apiGetUserName(strUserName, lngLen)
If lngX <> 0 Then
fOSUserName = Left$(strUserName, lngLen - 1)
Else
fOSUserName = ""
End If
End Function |
Wat ik nu wil is dit:
Ik wil dat het welkomscherm wordt geopend en meteen dmv "=fOSUserName()" de gebruikersnaam pakt en meteen de query wordt uitgevoerd en deze gegevens in datzelfde welkomscherm gooit. Dit alles met het openen van één formulier, ik heb nu van alles geprobeerd en ik kan nog maar één ding doen (volgens mij) en dat is een hele ranzige manier wat er niet uitziet omdat ik dat dmv een macro het welkomscherm open, gebruikersnaam grabbelt, formulier sluit, query draait en het formulier weer opent.
Alleen een gek zou zoiets doen en dus zoek ik naar een andere oplossing.
Kunnen jullie mij een zetje in de goede richting helpen? Ik hoop erachter te komen hoe het makkelijk kan want "=fOSUserName()" is retehandig maar als je een persoonlijke mededeling wilt geven op basis van deze functie dan kom ik niet veel verder dan de hierboven beschreven omweg. Google laat mij in de steek wat dit betreft omdat er veel staat beschreven maar niets waar ik iets aan heb omdat het allemaal over het loggen van gebruikersnamen gaat en dergelijke.
Ik ben al vanaf vorige week vrijdag bezig om het netter te krijgen maar ik zie het allemaal niet meer.
