Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Windows User auslesen

Begonnen von malibum, Februar 06, 2017, 17:22:27

⏪ vorheriges - nächstes ⏩

malibum

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  :)

Beaker s.a.

Hallo,
Schwer zu sagen, da im gezeigten Code gar nichts in eine Tabelle geschrieben wird  :(
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

malibum

Hallo,

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

Zitat[Benutzer]   [=Benutzer()] 

:-\

Gruß
Malibum

DF6GL

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.


Lachtaube

#4
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.
Grüße von der (⌒▽⌒)

malibum

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ß  ;)

Joss

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

Gruß
Josef

Lachtaube

@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>
Grüße von der (⌒▽⌒)

Joss

@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

daolix

ZitatDas würde ich so deuten, dass die Environ-Funktion nicht manipulierbar ist.
Doch, wenn du in gezeigter dosbox access startest.

Lachtaube

Josef, dann starte einmal Access mit start msaccess aus der Konsole nach Änderung der Umgebungsvariablen.
Grüße von der (⌒▽⌒)

Joss

@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

Joss

@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

Lachtaube

   Dim WSH As Object
   Dim WSHEnv As Object

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

   MsgBox WSHEnv("USERNAME")
Grüße von der (⌒▽⌒)

PhilS

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.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor