Neuigkeiten:

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

Mobiles Hauptmenü

Access Benutzername in Tabelle anzeigen und nicht Windowsbenutzername

Begonnen von timo, November 16, 2016, 13:00:41

⏪ vorheriges - nächstes ⏩

timo

Hallo zusammen,

folgendes Problem:

Ich habe in einer Tabelle das Feld Mitarbeiter ID. In diesem wird automatisch der Windows Benutzername angezeigt sobald ein neuer Datensatz erstellt wurde. Nur der Windows Benutzername besteht bei uns aus Buchstaben und Zahlen. Es ist nicht erkennbar wer den Eintrag gemacht hat.

Ist es möglich sich den Benutzernamen anzeigen zu lassen der bei Access vergeben wurde?
Oder kann ich irgendwie sagen das der Windows Benutzername zb."11ab11ab" durch "Max Mustermann" ersetzt werden soll?

Vielen Dank für eure Hilfe.

Gruß Timo

MzKlMu

Hallo,
ZitatIst es möglich sich den Benutzernamen anzeigen zu lassen der bei Access vergeben wurde?
Wo hast Du bei Access den Benutzernamen vergeben ?
Das war nur bis zur Version Access2003 möglich. Welche Version hast Du ?
Gruß Klaus

crystal

Hallo,

wenn du dein Access-Login-Formular nach erfolgtem Login nicht schließt, sondern nur minimierst, kannst du in anderen Formularen immer wieder auf dessen Daten zugreifen, z.B. mit
forms("frmLogin")!Username

Oder du speicherst den Access-Usernamen bei Login in einer TempVar oder einer entsprechenden globalen Variablen.

Damit hättest du dann auch den Fall berücksichtigt, dass sich Mitarbeiter A bei Windows anmeldet und sich dann Mitarbeiter B in Access einloggt. Diese Möglichkeit würde dir entgehen, wenn du dich auf eine Tabelle beziehst, in der der Windows-Username einem Access-User zugeordnet wäre.

lg
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

timo

Hallo,

Zitat von: MzKlMu am November 16, 2016, 13:13:14
Hallo,
ZitatIst es möglich sich den Benutzernamen anzeigen zu lassen der bei Access vergeben wurde?
Wo hast Du bei Access den Benutzernamen vergeben ?
Das war nur bis zur Version Access2003 möglich. Welche Version hast Du ?

Ich habe Access 2016. Unter Optionen-> Allgemein-> Benutzername und Initialen

Zitat von: crystal am November 16, 2016, 13:29:21
Hallo,

wenn du dein Access-Login-Formular nach erfolgtem Login nicht schließt, sondern nur minimierst, kannst du in anderen Formularen immer wieder auf dessen Daten zugreifen, z.B. mit
forms("frmLogin")!Username

Oder du speicherst den Access-Usernamen bei Login in einer TempVar oder einer entsprechenden globalen Variablen.

Damit hättest du dann auch den Fall berücksichtigt, dass sich Mitarbeiter A bei Windows anmeldet und sich dann Mitarbeiter B in Access einloggt. Diese Möglichkeit würde dir entgehen, wenn du dich auf eine Tabelle beziehst, in der der Windows-Username einem Access-User zugeordnet wäre.

lg
crystal


Leide habe ich kein Access Login Formular :( Deshalb ist das nicht möglich.

Danke für eure Hilfe.

Gruß

DF6GL

Hallo,

dieser "Benutzername" ist aber etwas anderes als der "Loginname" , der bei der Anmeldung an eine Access-DB verwendet werden konnte.


ZitatOder kann ich irgendwie sagen das der Windows Benutzername zb."11ab11ab" durch "Max Mustermann" ersetzt werden soll?


Wenn Du alle Windows-Benutzernamen kennst, dann können die ja in eine Tabelle mit ihren entpr. Mitarbeiternamen gelegt werden. Durch einfaches Nachschlagen erhältst Du dann den "aussagekräftigen" Namen.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

MzKlMu

Hallo,
ZitatIch habe Access 2016. Unter Optionen-> Allgemein-> Benutzername und Initialen
Zusätzliche Anmerkung:
Dieser Benutzernamen nutzt Dir gar nix, denn den vergibt der Entwickler und der ist für alle Nutzer der DB gleich.
Gruß Klaus

timo

Hallo

also ich kenne alle Windows-Benutzernamen und die dazugehörigen Mitarbeiter.
Die Speicher ich dann in einer Tabelle.
Aber was meinst du mit Nachschlagen?  Das sagt mir leider nix.

Vielen Dank noch mal

MzKlMu

Hallo,
mit Nachschlagen ist DLookup (DomWert) gemeint. Damit lassen sich Werte aus Feldern einer Tabelle holen wenn nur ein Feld bekannt ist.

Gruß Klaus

PhilS

Zitat von: MzKlMu am November 16, 2016, 16:11:40Dieser Benutzernamen nutzt Dir gar nix, denn den vergibt der Entwickler und der ist für alle Nutzer der DB gleich.
Diesen (Office-)Benutzernamen vergibt jeder Benutzer für sich selbst beim erstmaligen Start eines Programms aus der Office-Suite. - Nutzen tut er trotzdem nicht viel, weil jeder Benutzer ihn jederzeit ändern kann und ich ziemlich sicher bin, dass dieser Office-Benutzername selbst in einer Domäne nur lokal gespeichert wird.

Eine eigene Auflösungstabelle zwischen Windows-UserId und vollem Namen ist wirklich die beste, wenn nicht sogar einzige brauchbare Lösung.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

timo

Hallo zusammen,

vielen Dank für eure Hilfe. Leider komme ich trotzdem nicht damit klar.
Ich habe nun die Tabelle Benutzer erstellt mit Windows ID und Mitarbeiter. In Windows ID ist die WindowsKennung und im Mitarbeiter der korrekte Name.

Die Windows Kennung wird automatisch in der Tabelle Beschaffung im Feld MitarbeiterID durch den VBA Code

Private Sub btnSaveBeschaffung_Click()

With CurrentDb().OpenRecordset("Beschaffung", dbOpenDynaset, dbAppendOnly)
    .AddNew

!MitarbeiterID = Environ("USERNAME")

.Update
  End With

gespeichert.

Jetzt brauche ich diese DLookup Funktion.
Leider weiß ich überhaupt nicht wo ich diese Dlookup Funktion hinschreiben muss und wie diese aus zu sehen hat -.-

Wäre super wenn ihr mir das sagen könntet!

Vielen Dank

crystal

Hallo,
was du da machst - bitte entschuldige - ist Unfug und "von hinten durch die Brust ins linke Auge".

Dein Formular mit dem Button "saveBeschaffung" besitzt ja bereits einen RecordSet. Du braucht im Formular also nur ein Datenfeld "MitarbeiterId" (wie in der Tabelle auch). Dieses Feld hat als Datenherkunft einfach das Tabellenfeld "MitarbeiterID". Jetzt brauchst du diesem Feld nur den Wert zuweisen, wenn es sich um einen neuen Beschaffungs-Datensatz handelt, z.B. im Event Bei Änderung der Beschaffungsnummer oder bei Form_current eine kleine Sequenz wie
if mitarbeiterID = "" then
   mitarbeiterID = Environ("USERNAME")
endif

Da Access weiß, woher das Feld stammt, weiß Access auch, wo es gespeichert werden soll.

Das war's. Wenn der Beschaffungs-Vorgang beendet wird, speichert Access die MiarbeiterID automatich, genauso wie alle anderen Felder ja auch.

lg
crystal

Muß leider weg, nur soviel noch: DLookup wäre dazu gedacht, den Mitarbeiter-Namen anhand der Id zu holen, um ihn ihm Formular anzuzeigen.

Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

timo

Hallo Crystal,

ist gut möglich das es Unfug ist. Ich habe leider nur sehr wenig Ahnung von Access und VBA.

Ich probiere es gleich aus.

Vielen Dank

MzKlMu

Hallo,
folge zunächst mal dem Vorschlag von Crystal der aber etwas abzuändern wäre. Ein leeres Feld enthält keinen Leerstring ("") sondern ist Null. Es muss daher auf Null geprüft werden.
If IsNull(Me.mitarbeiterID) Then
.

Aber besser wäre es auf einen neuen Datenstz zu prüfen.
If Me.NewRecord = True then
   Me.mitarbeiterID = Environ("USERNAME")
End If


Wenn Du jetzt statt dem kryptischen Windows-ID den richtigen Namen brauchst, so nimmst Du in die Abfrage für das Formular die Übersetzungstabelle (Windows ID und Mitarbeiter) mit hinzu und verknüpfst über die Windows-ID (mitarbeiterID). Dann kannst Du im Formular auch den Klarnamen anzeigen, ganz automatisch, ohne Programmierung.


Gruß Klaus

crystal

Lieber Timo,
das mit dem Unfug war ja nicht böse gemeint. Jeder hat mal klein und unwissend angefangen.
Danke an Klaus für seine Korrekturen und Hinweise.
Dir viel Erfolg beim weiteren Probieren und Lernen.

lg
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...