Access-o-Mania

Access-Forum (Deutsch/German) => Access-Hilfe => Thema gestartet von: malibum am Februar 06, 2017, 17:22:27

Titel: Windows User auslesen
Beitrag von: malibum am Februar 06, 2017, 17:22:27
Hallo zusammen,

Und zwar möchte ich den Windows-User auslesen, sodass in einer Versionshistory direkt gespeichert wird welcher Windows User was geändert hat. Folgenden Code habe ich benutzt:

ZitatOption Compare Database
Option Explicit


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



Function Benutzer() As String
Dim UserN As String * 101
Dim Laenge As Long
Dim Ergebnis As Variant

Laenge = 100

Ergebnis = GetUserName(UserN, Laenge)

Benutzer = Left(UserN, Laenge - 1)

End Function

Dieser liest auch den aktuellen Windows-User aus und schreibt ihn in meine Versions-Hisory, allerdings wird immer in alle Datensatzänderungen der aktuelle User hineingeschrieben und nicht nur in den Datensatz der tatsächlich nur geändert wurde. Weis jemand woran dies liegen könnte?  ::)

Lg
Malibum  :)
Titel: Re: Windows User auslesen
Beitrag von: Beaker s.a. am Februar 06, 2017, 17:34:17
Hallo,
Schwer zu sagen, da im gezeigten Code gar nichts in eine Tabelle geschrieben wird  :(
gruss ekkehard
Titel: Re: Windows User auslesen
Beitrag von: malibum am Februar 07, 2017, 09:30:18
Hallo,

ja die Funktion gebe ich in der Tabelle für das Feld als Quelle an.

Zitat[Benutzer]   [=Benutzer()] 

:-\

Gruß
Malibum
Titel: Re: Windows User auslesen
Beitrag von: DF6GL am Februar 07, 2017, 10:01:18
Hallo,

Zitat
ja die Funktion gebe ich in der Tabelle für das Feld als Quelle an.

[Benutzer]   [=Benutzer()] 


???????????

In einem Tabellenfeld kann keine benutzerdefinierte Funktion eingesetzt werden.


Im Steuerelementinhalt eines Formular-Textfeldes wird zwar mit =Benutzer()  der Rückgabewert der Funktion angezeigt, aber deswegen noch lange nicht in ein Tabellenfeld gespeichert.

Titel: Re: Windows User auslesen
Beitrag von: Lachtaube am Februar 07, 2017, 11:02:20
Das Problem scheint wohl eher die verwendete (und vor uns geheimgehaltene) Methode zum Schreiben von Datensätzen in die History-Tabelle zu sein, als den Benutzernamen festzustellen.
Titel: Re: Windows User auslesen
Beitrag von: malibum am Februar 07, 2017, 11:44:22
Hallo,

ja ich konnte es lösen. Die Funktion musste ich in dem "Ereigniss auslösen" vor Aktualisierung eintragen, in dem auch gleichzeitig der Datensatz in die History kopiert wird...

Gruß  ;)
Titel: Re: Windows User auslesen
Beitrag von: Joss am Februar 09, 2017, 12:21:51
Hallo malibum,

noch ein Nachtrag:
Den Benutzer kannst du auch einfacher auslesen:
MsgBox Environ("USERNAME")

http://dbwiki.net/wiki/VBA_Tipp:_Windows_Umgebungsvariablen_und_spezielle_Verzeichnisse (http://dbwiki.net/wiki/VBA_Tipp:_Windows_Umgebungsvariablen_und_spezielle_Verzeichnisse)

Gruß
Josef
Titel: Re: Windows User auslesen
Beitrag von: Lachtaube am Februar 09, 2017, 12:39:43
@Josef,

Umgebungsvariablen lassen sich manipulieren, weshalb eine API-Version zum Beschaffen des Benutzernamens IMO zu bevorzugen ist. Deshalb gehört Environ wohl auch zu den Sandbox-Funktionen, die nicht direkt ohne einen BA-Wrapper in Ausdrücken (Abfragen, Textboxen) verwendet werden können.C:\Users\lachtaube>set USERNAME
USERNAME=lachtaube

C:\Users\lachtaube>set USERNAME=FooBar

C:\Users\lachtaube>set USERNAME
USERNAME=FooBar

C:\Users\lachtaube>
Titel: Re: Windows User auslesen
Beitrag von: Joss am Februar 09, 2017, 13:11:40
@Lachtaube,

ZitatUmgebungsvariablen lassen sich manipulieren

ich habe deinen Code mal ausprobiert (im DOS-Fenster oder wie das Ding heißt), und habe den Benutzernamen, wie von dir beschrieben, auf FooBar geändert, und dann abgefragt. Funktioniert. Es wird FooBar angezeigt.
Wenn ich dann aber zugleich in Access MsgBox Environ("USERNAME") aufrufe , wird mir trotzdem der richtige (alte) Benutzername angezeigt. Das würde ich so deuten, dass die Environ-Funktion nicht manipulierbar ist.

Gruß
Josef
Titel: Re: Windows User auslesen
Beitrag von: daolix am Februar 09, 2017, 13:32:10
ZitatDas würde ich so deuten, dass die Environ-Funktion nicht manipulierbar ist.
Doch, wenn du in gezeigter dosbox access startest.
Titel: Re: Windows User auslesen
Beitrag von: Lachtaube am Februar 09, 2017, 13:53:42
Josef, dann starte einmal Access mit start msaccess aus der Konsole nach Änderung der Umgebungsvariablen.
Titel: Re: Windows User auslesen
Beitrag von: Joss am Februar 09, 2017, 14:02:54
@Lachtaube,

ZitatJosef, dann starte einmal Access mit start msaccess aus der Konsole nach Änderung der Umgebungsvariablen.
stimmt, jetzt wird der geänderte Benutzername angezeigt.

Aber wer tut denn sowas? ;)
So "böse" Menschen gibt es doch gar nicht?  :) ;)

Gruß
Josef
Titel: Re: Windows User auslesen
Beitrag von: Joss am Februar 09, 2017, 14:42:34
@Lachtaube und daolix,

nachdem ihr mir alles so schön erklärt habt (danke dafür),
noch eine Nachfrage:

Wenn ich die Umgebungsvariablen über den Windows Scripting Host ermittle, sind sie doch nicht manipulierbar, oder?

Dim WSH As Object
Dim WSHEnv As Object

Set WSH = CreateObject("WScript.Shell")
Set WSHEnv = WSH.Environment("VOLATILE")

MsgBox WSHEnv("USERNAME")


Gruß
Josef
Titel: Re: Windows User auslesen
Beitrag von: Lachtaube am Februar 09, 2017, 15:14:38
   Dim WSH As Object
   Dim WSHEnv As Object

   Set WSH = CreateObject("WScript.Shell")
   Set WSHEnv = WSH.Environment("VOLATILE")
   WSHEnv("USERNAME") = "FooBar"

   MsgBox WSHEnv("USERNAME")
Titel: Re: Windows User auslesen
Beitrag von: PhilS am Februar 09, 2017, 15:16:40
Zitat von: Joss am Februar 09, 2017, 14:42:34Wenn ich die Umgebungsvariablen über den Windows Scripting Host ermittle, sind sie doch nicht manipulierbar, oder?
Umgebungsvariablen können von jedem Benutzer, auch ohne Admin-Berechtigung, gesetzt oder zumindest für den jeweiligen Kontext überschrieben werden. Wie du sie ausliest, ist völlig egal.
Titel: Re: Windows User auslesen
Beitrag von: Joss am Februar 09, 2017, 15:50:43
Danke für die Antworten.
Wieder was gelernt. :)

Dass aber auch überall die Manipulations-Gefahren "lauern" müssen! ;)

Gruß
Josef