PDA

Vollständige Version anzeigen : Benutzer anzeigen (vom OS)


heini
25.09.2003, 12:20
Hallo zusammen!

Ich habe mal wieder ein Problem:
Es soll der aktuelle Benutzer ausgelesen (aus NT/Win2k),
und in eine Tabelle zurückgeschrieben werden.
Leider scheitert das Vorhaben schon beim Auslesen.
Ich verwende folgenden Code von Acces-Home:

Private Declare Function apiGetUserName Lib "advapi32.dll" _
Alias "GetUserNameA" (ByVal lpBuffer As String, _
nSize As Long) As Long


Function BenutzerName() As String

Dim lngLen As Long
Dim lngX As Long
Dim strBenutzerName As String

strBenutzerName = String$(254, 0)
lngLen = 255
lngX = apiGetUserName(strBenutzerName, lngLen)
If lngX <> 0 Then
BenutzerName = Left$(strBenutzerName, lngLen - 1)
Else
BenutzerName = ""
End If

End Function


Es will aber nicht laufen :mad:

Hintergrund:
Der angezeigte Benutzer erfaßt Daten über ein Formular. Beim Speichern des DS soll der NT-Benutzername in die Tabelle übertragen werden, damit der DS einem "Erfasser" zugeordnet ist.

Hat vielleicht jemand eine zündende Idee?

Danke im Voraus :biggrinl:

Grüsse
heini

jens05
25.09.2003, 12:29
Hallo,
hast du es mal mit

Environ("Username")

probiert.

CptChaos
25.09.2003, 12:34
Was hakt denn genau? bzw. welche FM kommt denn?
Ich verwende den Code von Access-Home in meinen DB auch, und es funktioniert einwandfrei.

Hab hierzu folgendes Modul:


Option Compare Database
Option Explicit

Private Declare Function tnl_UserName Lib "advapi32.dll" Alias "GetUserNameA" _
(ByVal lpBuffer As String, nSize As Long) As Long

Public Function NetworkUserName()
Dim struser As String
Dim ret As Long

struser = String$(255, 0)
ret = tnl_UserName(struser, 255)
NetworkUserName = Left(struser, InStr(1, struser & Chr(0), Chr(0)) - 1)
End Function


NetworkUserName kannst Du dann in deinen Datenfeldern verwenden um die Kennung auszulesen

Anne Berg
25.09.2003, 12:35
Was denn nun: Win2K oder NT? Das könnte verschieden reagieren.
Bei mir läuft die Funktion. Was bekommst du denn für einen Fehler??

heini
25.09.2003, 12:40
Hallo!

Ich danke Euch für die schnellen Antworeten.

@jens05:
Environ("Username") habe ich noch nicht versucht.
Wo muß das denn eingebaut werden (habe von VB nur wenig Ahnung)?

@CptChaos:
Tja, das wüsste ich auch gerne. Er bringt keine Fehlermeldung.
Es sieht so aus, als würde er nichts tun. -> Fehlt hier vielleicht ein Verweis?
Oder eine .dll??

@Anne: zu über 90% Win2k; NT kann vernachlässigt werden.

Thx 2 all 4 help!

Grüsse
heini

CptChaos
25.09.2003, 12:43
Obiger Code funktioniert bei mir sowohl unter NT4.0 als auch unter W2k und XP.

Hast Du die erste Zeile aus meinem Code beispiel bei Dir im Modul?


Private Declare Function tnl_UserName Lib "advapi32.dll" Alias "GetUserNameA" _
(ByVal lpBuffer As String, nSize As Long) As Long


ohne die funktionierts nicht!

Anne Berg
25.09.2003, 12:47
Vielleicht solltest du mal erwähnen wie du den Code einsetzt? ;)

heini
25.09.2003, 12:53
Gute Idee :rolleyes: !

Also ich habe folgendes versucht:
Eigenes Modul mit Namen "nt_user_anzeigen" und
ein Listenfeld in einem Formular mit Verweis auf das Modul
-> dort als Steuerelementinhalt die Funktion angegeben.
Und siehe da, es tut sich nix :bawling:

Danke für die Hilfe!

Grüsse
heini

CptChaos
25.09.2003, 12:58
Hab mal ne kleine TestDB erstellt; da is ein Modul mit meinem Code und ein ungebundenes Formular mit dem Feld in dem Dir der angemeldet User angezeigt wird.

heini
25.09.2003, 13:02
Hallo Benny,

das war schnell!
Ich werde es jetzt testen und mich wieder melden.

Erst mal Danke an alle :hands:

Grüsse
heini

heini
25.09.2003, 13:36
Hallo Benny,

ich habe das Modul nun in meine DB übernommen.
Der Benutzername wird nun im entsprechenden Feld angezeigt.
Allerdings nur auf meinem Rechner :(
Bei dem Rechner eines Kollegen bringt er folgenden Fehler:
"Fehler beim kompilieren: Projekt oder Bibliothek nicht gefunden",
und er markiert:

struser = String$(255, 0)


Was kann das sein, eine Idee?

Grüsse
heini

//EDIT: der Kollege hat, wie ich, administrative Rechte.

CptChaos
25.09.2003, 13:57
zum einen mal schau ob die Datei "advapi32.dll" da ist, wo von ich ausgehe und mal die Verweise ansehen (vmtl. andere als bei Dir)

heini
25.09.2003, 15:24
Hallo Benny!

Die .dll hatte ne Macke.
Kurz ausgetauscht und schon geht´s :D

Danke für die Hilfe!

Grüsse
heini