Windows-user automatisch toevoegen bij aanmaak record

Status
Niet open voor verdere reacties.

tomswaelen

Gebruiker
Lid geworden
8 dec 2004
Berichten
349
Ik heb een aantal tabellen/formulieren/query's in een Access-bestand. Is er een mogelijkheid dat bij het toevoegen van een record (rechtstreeks in tabel of via query) via een formulier, er bij dat record automatisch de Windows-user die ingelogd is, wordt toegevoegd, bv. in een kolom User?

Ik heb al wat gegoogled, maar ik ben nog niet tot het antwoord gekomen.
 
Dat lijkt mij geen enkel probleem. Ik zou daar een functie voor gebruiken, die bijvoorbeeld de ingelogde user toewijst aan een TempVar variabele. Die variabele kun je dan in de onderliggende query aanroepen. Of, wellicht makkelijker, bij het aanmaken van een nieuw record via de gebeurtenis <Bij aanwijzen> het User veld vullen met de (ook in de eerder genoemde functie gebruikte) opdracht VBA.Environ("UserName").
 
Ik heb ondertussen al wat bijeen gegoogled, maar het werkt nog niet. Ik heb in Access een module GetUserName gemaakt:

Code:
Option Compare Database
Option Explicit
Declare Function GetUserNameA Lib "advapi32.dll" (ByVal IpBuffer As String, nSize As Long) As Long
'

Function GetUserName(Optional fAppendAccessUserName As Boolean = False, _
            Optional lngMaxLen& = 255) As String
  Dim lngLen&, strBuf$
  If lngMaxLen > 255 Then lngMaxLen = 255
  strBuf = Space(lngMaxLen)
  If CBool(GetUserNameA(strBuf, lngMaxLen)) Then
    GetUserName = Left$(strBuf, lngMaxLen - 1)
  Else
    GetUserName = ""
  End If
  If fAppendAccessUserName Then
    If GetUserName <> "" Then GetUserName = GetUserName & " "
    GetUserName = GetUserName & "(" & CurrentUser & ")"
  End If
 End Function

In het formulier terzake heb ik dan een veld 'User' gemaakt (en een gelijknamige veld in de achterliggende tabel). In de code van het formulier heb ik dit toegevoegd:

Code:
Private Sub User_BeforeUpdate(Cancel As Integer)

        If Me.NewRecord = True Then
            Me!User = GetUserName

        Else
            Me!User = GetUserName
        End If

End Sub

Dit werkt echter niet, het veld in de achterliggende tabel blijft leeg. Waar gaat het fout?
 
Die functie die je hebt gevonden is zo'n beetje uit het jaar 0. En dan bedoel ik niet 2000, maar 1900 :). Zoals ik al zei: dit soort dingen regel je bij de eigenschap <Bij aanwijzen> van het formulier. En de hele actie kan met één regel gedaan worden. Daarnaast gebruik je de IntelliSense niet, dus je doet zo'n beetje alles anders als dat ik het doe :D. En toch blijf ik achter mijn eigen werkwijze staan:
Code:
Private Sub Form_Current()
    If Me.NewRecord Then Me.User.Value = VBA.Environ("UserName")
End Sub
 
Dat werkt inderdaad prima voor de toepassing die ik nodig heb, bedankt! :)

Klein probleempje: als ik het huidige record opsla, gaat het formulier uiteraard opnieuw naar een nieuw record, waar hij de username opnieuw invult. Ik kan het formulier dan niet sluiten, want dan zegt hij dat ik niet alle velden heb ingevuld.

Zou het een oplossing zijn als ik de code pas aanroep bij het opslaan of 'verlaten' van de huidige record? Of eventueel wanneer het laatste verplichte veld wordt ingevuld?
 
Klein probleempje: als ik het huidige record opsla, gaat het formulier uiteraard opnieuw naar een nieuw record, waar hij de username opnieuw invult.
Welke exotische versie gebruik jij? Dat is bij mij nog nooit gebeurd :). Hoef je niet op te antwoorden, want ik weet uiteraard wel wat je gedaan hebt: je hebt je formulier op <Gegevensinvoer>=Ja staan. En dan krijg je dat inderdaad. Ik zou dat dus niet gebruiken (doe het zelf eigenlijk nooit) en met een knop een nieuw record aanmaken. Of vanuit een hoofdformulier een formulier openen in de AddNew modus, dan ben je overal vanaf. n ieder geval van dit probleem. Dat je dus alleen een nieuw record aanmaakt als je dat echt wilt. Sowieso moet je voorkomen dat je 'automatisch' een nieuw record aanmaakt door vanuit het laatste veld naar het eerstvolgende veld (=nieuw record) te springen want meestal wil je dat niet.
 
Nee, Gegevensinvoer staat op Nee...

Het formulier wordt inderdaad normaliter geopend vanuit een ander formulier op AddNew modus. Alleen moet de gebruiker, als het formulier eenmaal open is, direct ook nog een nieuw record kunnen toevoegen.
 
Dat is toch geen probleem als je daar een knop voor maakt? Dan weet je tenminste zeker dat het een bewuste actie is, en dat dus alle verplichte velden ook ingevuld gaan worden.
 
Ja, die is er ook :) (Record toevoegen, heb ik een knop gemaakt)

Dus ik begrijp niet goed hoe het komt.
 
Het toevoegen van een knop wil natuurlijk niet zeggen dat een gebruiker niet op een andere manier een nieuw record kan aanmaken. Dat kun je voorkomen als je de optie <Toevoegingen toestaan> uitzet. Dat moet je dan uiteraard via de knop weer tijdelijk aanzetten en na het toevoegen ook weer uit.
 
Ik ben er niet uitgeraakt, heb de actie (user invullen) dan maar gehangen aan een onChange event op het eerste verplichte veld.

Is misschien niet helemaal koosjer, maar werkt ook prima voor mijn toepassing :)
 
Je weet dat je met een voorbeeldje veel beter geholpen kan worden? :)
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan