News

FAQ Access – Netzwerk Anmeldenamen ermitteln

Category:

Access, FAQ

0

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

 

Tags: ,

Leave a Reply

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.