FAQ Access – Netzwerk Anmeldenamen ermitteln
Access Formulare – Netzwerk Anmeldenamen ermitteln
Problem :
Es müssen in unseren Datenbanken abhängig vom Namen, mit dem sich ein Anwender im Netzwerk angemeldet hat, zusätzliche Sicherheitseinstellungen vorgenommen werden.
Über „CurrentUser()“ finden wir heraus, unter welchem Namen sich ein Anwender bei Access angemeldet hat. Wie aber lässt sich der Anmeldename für das Netzwerk herausfinden?
Problemlösung:
Windows stellt eine spezielle DLL (Dynamic Link Library) ADVASPI32.DLL zur Verfügung, die erweiterte Funktionen für die globale Nutzung in Anwendungen anbietet. Eine dieser Funktionen ist „GetUserName()“.
Bevor Sie auf externe API-Funktionen in DLLs zugreifen können, müssen Sie sie im allgemeinen Teil eines neuen oder vorhandenen Moduls deklarieren:
Declare Function GetUserName Lib "advapi32.dll" _ Alias "GetUserNameA" (ByVal lpBuffer As String, _ nSize As Long) As Long
Anschließend können Sie die API-Funktion in einer Access-Funktion „NetworkUsername()“ wie folgt aufrufen:
Function NetworkUsername() As String Dim lngMaxLen As Long, lngResult As Long Dim strUsername As String strUsername = String$(254, 0) lngMaxLen = 255 lngResult = GetUserName(strUsername, lngMaxLen) If lngResult <> 0 Then NetworkUsername = Left$(strUsername, lngMaxLen - 1) Else NetworkUsername = "???" End If End Function
Der API-Funktion werden zwei Parameter übergeben: Eine String-Variable, die nach dem Aufruf den Namen beinhaltet und eine numerische Variable, die festlegt, wie viele Zeichen maximal in der String-Variable abgelegt werden können.
Das eigentliche Funktionsergebnis von „GetUserName()“ ist entweder „True/-1“ oder „False/0“. Bei erfolgreicher Ausführung beinhaltet der Parameter „lngMaxLen“ die Anzahl der Zeichen, die in „strUserName“ zurückgeliefert wurden, so dass dieser Wert für die Zuweisung des Funktionsergebnisses über „NetworkUsername = Left$(strUserName, lngMaxLen – 1)“ herangezogen werden kann.
Mit Hilfe dieser Funktion können Sie nun beispielsweise in einem Formular einzelne Felder wie folgt ein- oder ausblenden:
If NetworkUsername() = "Sabine Müller" Then Me.txtGehalt.Visible = False Me.btnNeu.Enabled = False End If