Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Environ oder apiGetUserName

Begonnen von gromax, April 19, 2015, 15:39:33

⏪ vorheriges - nächstes ⏩

gromax

Hallo liebe Access-Profis,
mit meiner DB bin ich nahezu fertig und möchte diese für den Gebrauch in unserem Amt einrichten. Nun zeigt – wohl vereinzelt – ein Problem:
Mittels eines AutoExec-Makros starte ich eine Funktion, die überprüft, welcher START-Dialog aufgerufen werden soll; dazu ist es notwendig, den Anmeldenamen des Nutzers mit Einträgen in einer Tabelle [tbl_VERWALTUNGEN] zu überprüfen.
Dazu habe ich folgende Prozedur "gefunden", die – mit tw. Aussetzern – funktioniert:

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

Public Function fOSUserName() As String
     Dim lngLen As Long, lngX As Long
     Dim strUserName As String
     Dim MyForm As Variant
     Dim VER_EDVKonto 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
     MyForm = DLookup("VER_EDVKonto", "tbl_VERWALTUNGEN", "VER_EDVKonto = '" & fOSUserName & "'")
(...)
End function

Nun habe ich auch folgende, deutlich kürzere Prozedur im Einsatz – allerdings erst seit heute:

Public Function fOSUserName() As String
Dim MyForm As Variant
Dim VER_EDVKonto As String
     fOSUserName = Environ("username")
MyForm = DLookup("VER_EDVKonto", "tbl_VERWALTUNGEN", "VER_EDVKonto = '" & fOSUserName & "'")
(...)
End function

Hat jemand Erfahrung mit diesen Code-Varianten?
Bei ersterer Vorgehensweise kann es vorkommen, dass das Makro plötzlich streikt (Meldung: Das Makro kann diese Funktion nicht finden!) und ich das gleiche Makro erst nach erneuter Eingabe von gleichem Text und Befehl wieder nutzen kann.
Auch habe ich irgendwo gelesen, dass die Environ-Funktion in den neueren Access-Version nicht mehr vorhanden ist?!
Ich nutze Win7 (64-Bit) und Access 2013 (32-Bit).

Da ich diese Woche diese DB noch meinen Mitarbeitern vorstellen werde, wäre ich dankbar, wenn mir dazu jemand Informationen, Erfahrungen oder auch nur Vermutungen rückmelden könnte.

Vielen Dank
gromax

daolix

hallo
ob environ in zukünftige VBA-versionen nicht mehr vorkommt weis ich jetzt nicht, environ muss aber nicht immer den richtigen usernamen zurückgeben.
wenn man access zum bsp durch bat-datei startet, könnte man den usernamen via set-befehl neu für diese session setzen, und dieser wird dann mit environ auslesen.

gromax

Hallo daolix,
vielen Dank für Deine Antwort; jetzt habe ich zu den beiden Versionen von mir noch die Option des Aufrufs meiner DB mittel bat-Datei.
Hast Du denn eine Präferenz hinsichtlich der Stabilität; ich habe auch im Internet an einigen Stellen gelesen, dass der Aufruf über das AutoExec-Makro gelegentlich fehlerhaft abläuft und der Korrektur bedarf. Das wäre natürlich schlecht!
Kannst Du dazu was sagen?

Viele Grüße
gromax

daolix

Zitatvielen Dank für Deine Antwort; jetzt habe ich zu den beiden Versionen von mir noch die Option des Aufrufs meiner DB mittel bat-Datei.
Ich glaub du hast mich falsch verstanden, das ist keine weitere Option, sondern ich hab nur darauf hingewiesen das der Username mit Environ nicht eindeutig ist, wenn böse User die DB mit einer Batch starten und in dieser Batch einen willkürlichen Usernamen (Set USERNAME=EinFalscherUsername) setzen.

Zum Problem mit Autoexec-Macro und gelegentlichen Aussetzern kann ich leider nix sagen, da ich diese Prob noch nie hatte und Macros auch überhaupt nicht mehr verwende. Meistens lasse ich Autostartformulare über Extras/Start laufen.

gromax

Hallo Daolix,

ok, das habe ich jetzt verstanden.

Wenn ich abhängig von der Hinterlegung eines Anmeldenamens in einer Tabelle 'Formular 1' starte und bei fehlender Hinterlegung eben 'Formular 2', dann hilft mir doch die Startoption mit Extra/Start nicht weiter - oder etwa doch?!
Da sehe ich nur den Weg über das AutoExec-Makro. Oder gibt es da noch eine andere Möglichkeit?

Trotzdem vielen Dank für Deine Bereitschaft, mir zu helfen!

Viele Grüße
gromax

MaggieMay

Hallo,

ich würde mal getrost die geäußerten Bedenken bzgl. der Manipulierbarkeit der Umgebungsvariablen beiseite schieben, weil derjenige der das versucht schließlich auch wissen muss, wodurch er sie ersetzen muss und was er damit bewirken kann.

Ob du das Öffnen des Einstiegs-Formulars nun via AutoExec-Makro oder über ein Startformuar steuerst, dürfte egal sein.
Freundliche Grüße
MaggieMay

daolix

ZitatWenn ich abhängig von der Hinterlegung eines Anmeldenamens in einer Tabelle 'Formular 1' starte und bei fehlender Hinterlegung eben 'Formular 2', dann hilft mir doch die Startoption mit Extra/Start nicht weiter
warum nicht. starte formular1, und prüfe im ereignis formopen den usernamen, wenn nicht vorhanden starte formular2 und setze den parameter cancel auf true. ein nicht eingetragener user wird dann formular2 zu sehen bekommen.

Zitatweil derjenige der das versucht schließlich auch wissen muss,
der versuch kann auch unwissendlich passieren.