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
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 ?
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
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ß
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.
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.
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
Hallo,
mit Nachschlagen ist DLookup (DomWert) gemeint. Damit lassen sich Werte aus Feldern einer Tabelle holen wenn nur ein Feld bekannt ist.
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.
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
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.
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
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.
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