Network Username in Access VBA

A.E.Veltstra
2004/05/03

Afbeelding: 'Nederlandse vlag'Nederlands - Image: 'English flag'English

Afbeelding: 'Nederlandse vlag'Nederlands

Kenwoorden
vb, vba, vbscript, visual basic, access, api, gebruikersnaam, netwerk, environment
Probleem
Gebruikers van je Accessapplicatie loggen in op het netwerk en vinden dat ze dan niet meer moeten hoeven inloggen op je applicatie. Hoe vind je de netwerkgebruikersnaam terug?
Oplossing
Gebruik de in VBA ingebouwde Environ()-methode, en waar dat niet kan of geen resultaat oplevert, de GetUserName() api.

Image: 'English flag'English

Keywords
vb, vba, vbscript, visual basic, access, api, username, user name, network, environment
Problem
People using your Access application log into their network and don't want to log into your application as well. How do you retrieve their network user name?
Solution
Use the vba-built-in Environ()-method, and when that yields no results or cannot be used at all, use the GetUserName() api.
Code: Environ()
UserNameVba = VBA.Interaction.Environ("USERNAME")
Code: GetUserName()
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" ( _

   ByVal lpBuffer As String, nSize As Long) As Long



Public Function UserNameApi() As String

  Dim strReturn As String, nSize As Long, lngRet As Long

  

  'GetUserName fills the variable with a name and ends with a 0-char.

  strReturn = String(256, Chr(0))

  nSize = Len(strReturn)

  

  lngRet = GetUserName(strReturn, nSize) 'will fail when nSize is too small

  If lngRet = 0 Then  'failure

    If nSize > 0 Then 'more data (ERROR_MORE_DATA)

      strReturn = String(nSize, Chr(0)) 'nSize contains necessary length

      lngRet = GetUserName(strReturn, nSize)

    End If

  End If

  

  'If the variable contains a 0-char, the username is everything in front of it.

  nSize = InStr(1, strReturn, Chr(0))

  If nSize > 0 Then

    UserNameApi = Left(strReturn, nSize - 1)

  Else

    UserNameApi = strReturn

  End If

  

End Function