PDA

Vollständige Version anzeigen : Windows-Anmeldenamen für Access 97/2000/XP


Günther Kramer
30.12.2002, 14:51
Die Funktion ermittelt den aktuell angemeldeten Netzwerkuser.
Erstellen Sie ein neues Modul und fügen Sie nachfolgenden Code ein:

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Option</span> <span class="TOKEN">Compare</span> <span class="TOKEN">Database</span><br><span class="TOKEN">Option</span> <span class="TOKEN">Explicit</span> <br>
<span class="TOKEN">Private</span> <span class="TOKEN">Declare</span> <span class="TOKEN">Function</span> apiGetUserName <span class="TOKEN">Lib</span> "advapi32.dll" _
<span class="TOKEN">Alias</span> "GetUserNameA" (<span class="TOKEN">ByVal</span> lpBuffer <span class="TOKEN">As</span> String, _
nSize <span class="TOKEN">As</span> <span class="TOKEN">Long</span>) <span class="TOKEN">As</span> <span class="TOKEN">Long</span> <span class="TOKEN">Function</span> fOSUserName() <span class="TOKEN">As</span> <span class="TOKEN">String</span><br>
<span class="TOKEN">Dim</span> lngLen <span class="TOKEN">As</span> Long, lngX <span class="TOKEN">As</span> <span class="TOKEN">Long</span>
<span class="TOKEN">Dim</span> strUserName <span class="TOKEN">As</span> <span class="TOKEN">String</span>

strUserName = String$(254, 0)
lngLen = 255
lngX = apiGetUserName(strUserName, lngLen)
<span class="TOKEN">If</span> lngX <> 0 <span class="TOKEN">Then</span>
fOSUserName = Left$(strUserName, lngLen - 1)
<span class="TOKEN">Else</span>
fOSUserName = ""
<span class="TOKEN">End</span> <span class="TOKEN">If</span><br>
<span class="TOKEN">End</span><span class="TOKEN">Function</span></pre></div>

Zum Ermitteln des angemeldeten Netzwerkusers verwenden Sie folgenden Aufruf:

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre>MsgBox "Der aktuelle Netzwerkbenutzer: " & fOSUserName</pre></div>

Mose.P
09.01.2003, 11:06
Ich habe bei mir (Access 97) die Anzeige des Benutzernamens noch ein wenig einfacher realisiert.
Die Funktion Environ ist bei Access standardmäßig enthalten und kann diverse Umgebungsvariablen zurückgeben. Der Aufruf ist sehr einfach und kommt ohne ein zusätzliches Modul aus:


MsgBox "Der aktuelle Netzwerkbenutzer: " & Environ("UserName")


Natürlich kann man den Benutzernamen auch einer Variablen zuweisen:

Dim Benutzer As String
Benutzer = Environ("UserName")


Im Test unter Windows2000 gibt meine Funktion das gleiche zurück wie Deine.
Gibt es einen Unterschied im Ergebnis zwischen unseren beiden Versionen?

Ciao,

André

sodah
07.11.2003, 12:33
Probiert mal folgendes aus, um den Unterschied festzustellen.
Legt einen Benutzer im Windows mit dem Namen: test. Dann meldet Euch mit diesem Benutzer an und wieder ab. Ändert dann den Benutzernamen in Testneu und meldet Euch wieder als Testneu an.
In Access mit wird jetzt mit Environ("UserName") das Ergebnis Test angezeigt, obwohl man mit Testneu angemeldet ist. Man kann den Rechner so oft hoch und runter fahren wie man will das Ergebnis bleibt gleich.
Aber mit der aufwendigeren Prozedure sollte das Ergebnis Testneu entstehen.
Soviel zum Thema Unterschied. Nun, klar ist, das der Fall er sellten eintritt, das ein Benutzer seinen Kontonamen ändert. Aber gehen wir mal von dem Fall aus, in eine bestehende Firmennetzwerklogistik mit einer neuen Datenbank eingreifen zu wollen. Spätestens da muß man das eine oder andere Konto ändern.

cpac
12.05.2004, 10:45
Wenn ich mich recht erinnere, wird die Umgebungsvariable "UserName" nur in den "professionellen" Version von Windows (NT,2000,XP) mit dem Anmeldenamen belegt, während sie in Windows 9x/ME gar nicht belegt wird. Insofern sollte man die Funktion von Günther verwenden.

Ulibaer
03.02.2005, 11:08
Ist es möglich diesen ausgelesenen User immer beim start der Datenbank in eine Tabelle zu speichern, um immer den angemeldeten User zu dokumentieren
Und wenn ja wie ?? wie starte ich dieses Modul ?? Bin in diesen Dingen leider nicht so fit !!

Danke für die Unterstützung.

LG ULI

TommyK
03.02.2005, 13:26
Hallo Uli,

Du kopierst den Code in ein neues Modul und speicherst es:
Private Declare Function apiGetUserName Lib "advapi32.dll" _
Alias "GetUserNameA" (ByVal lpBuffer As String, _
nSize As Long) As Long

Public msUser As String
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
msUser = fOSUserName
End Function
Dann erstellst Du ein Makro mit dem Namen "Autoexec", wird beim Start automatisch ausgeführt.
Bei Aktion kommt rein "AusführenCode" und bei Funktionsname "fOSUserName()".
Jetzt die Variable "msUser" als Inhalt den User und Du kannst damit machen was Du willst.
Jetzt müsstest Du genauer werden, was Du mit dem User machen willst.

mactoolz
07.02.2005, 16:26
Hi,

das ist eine Nette Idee, wie speichere ich aber denn den User in einer Tabelle ab.


MacToolz

TommyK
07.02.2005, 17:50
Hallo,

Jetzt müsstest Du genauer werden, was Du mit dem User machen willst.

Ich hatte das schon mal gefragt.
Wann soll der User zu welchem Ereignis der User gespeichert werden.
Ansonsten fällt meine Antwort sehr allgemein aus und Du kannst damit wieder nichts anfangen.

mactoolz
08.02.2005, 13:16
Hi,

du hattest ja erwähnt das man das bei jedem Start von der Datenbank durch die Autoexec den User speichern kann. Ich würde gerne den User beim start der Datenbank durch die Autoexec in einer Tabelle speichern wollen.


MacToolz

TommyK
08.02.2005, 14:08
Hallo MacToolz,

ich hab mal ein Bsp gemacht.

Schau es Dir mal an und wenn Du noch Fragen hast dann melde Dich.

constante
05.09.2005, 09:07
Habe dazu mal ne Frage: ich benutze Office XP und durch das Konvertieren der Datenbank läuft auch die Beispieldatenbank "tk_UserLog97". Das Makro, die Tabelle und das Modul wollte ich dann in meine Datenbank exportieren. Jedoch funktioniert die Funktion des Loggen des Benutzers net. Kriege schon beim Start ne Fehlermeldung "Fehler beim Kompilieren Benutzerdefinierter Typ nicht definiert". Kann mir da einer helfen wie ich die Funktion des Loggen der Benutzer recht einfach hinkriege???

TommyK
05.09.2005, 11:08
Hallo,

da fehlt der Verweis auf die Microsoft DAO 3.6. Object Library.
Im VBA-Editor Menu Extras->Verweise wählen und dort die Library auswählen.

constante
05.09.2005, 11:23
hui, da muss auch erst mal drauf kommen.......danke für die kompetente schnelle Antwort

lalo
09.01.2006, 14:27
Hallo,

habe moch eine sehr kurze Variante zum Ermiteln der User-ID:

Dim NtSys as new WinNTsystemInfo
debug.print NtSys.Username

und weiterhin auch noch:

debug.print Ntsys.Computername
debug.print Ntsys.DomainName
debug.print NtSys.PDC

Falls der ADS Benutzername aus dem Netz gebraucht wird siehe
ADS Benutzername ermitteln (http://www.ms-office-forum.net/forum/showthread.php?t=177325)
Gruß Lalo