Abfrage nach aktuellem Nutzer gefiltert

Moderator: ModerationP

Abfrage nach aktuellem Nutzer gefiltert

Beitragvon nenofka » 09. Aug 2019, 11:47

Hallo zusammen,

ich komme nicht mehr weiter.
Folgende Eckdaten:
- in Tabelle tblEska_gesamt sind alle Datensätze von allen Usern abgelegt
- in der Tabelle tblEska_gesamt gibt es das Datenfeld Bearbeiter
- der aktuelle User wird automatisch anhand des Windows-Users erkannt (wird im String WindowsUser gespeichert)
- Es gibt eine Landing-Page zur Navigation

Folgendes würde ich gerne Umsetzen:
- auf der Landing-Page gibt es den Button btnEigeneEska
- mit Klick auf diesen Button soll sich ein Formular öffnen, indem nur die Datensätze des aktuellen Users angezeigt werden sollen
- das Formular soll vom Layout her dem des geteilten Formulars entsprechen
- Es ist nicht notwendig, dass das Formular gespeichert wird

Wie ich das letztlich realisiere ist mir gleich, da bin ich offen für alle Lösungen. Mit meinen Suchen bei Google hab ich schon vieles ausprobiert (Über VBA-Code als Click-Ereignis auf der Landing-Page, als SQL-Abfrage, etc.), konnte aber nie das gewünschte Ergebnis erzielen.

Ich hoffe ihr könnt mir helfen, ich weiß nicht mehr weiter...

Grüße
Dennis
nenofka
 

Re: Abfrage nach aktuellem Nutzer gefilter

Beitragvon knobbi38 » 09. Aug 2019, 12:52

Hallo Dennis,

wo ist jetzt das Problem?

Dieses "eingeschränkte" Formular braucht doch nur als Datenquelle ein Abfrage, welche in der Where-Condition den aktuellen Benutzer mit einbezieht.

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1180
Registriert: 02. Jul 2015, 14:23

Re: Abfrage nach aktuellem Nutzer gefilter

Beitragvon nenofka » 09. Aug 2019, 13:08

Hallo Ulrich,

danke dir für die Antwort. Da liegt das Problem. Ich bekomm die Abfrage nicht so hin, dass er nach dem aktuellen Benutzer sortiert..

In meiner Landing-Page läuft die Abfrage des aktuellen Windows-User mit dieser Funktion:

Code: Alles auswählen
Function WindowsUser()
     Dim size As Long
     Dim User As String
     size = 255              ' Buffer-Länge für API-Funktion
     User = String$(size, 0) ' Buffer-String mit maximaler Buffer-Länge
                             ' zur Aufnahme des API-Funktions-Rückgabestrings
     ' nach Aufruf der API-Funktion enthält der String den User-Namen
     ' und die Buffergröße-Variable wird auf die gelesene String-Länge gesetzt;
     ' dieser Buffer-String muss dann auf die String-Länge gekürzt werden
     WindowsUser = IIf(GetWindowsUser(User, size) <> 0, Left$(User, size - 1), "")
     
 End Function


Die Umsetzung in den in der Tabelle tblNutzer findet hiermit statt:

Code: Alles auswählen
Private Sub Form_Load()

    strUser = DLookup("VorNachname", "tblNutzer", "AKennung = '" & WindowsUser & "'")
    Text14.Value = strUser
   
End Sub


Die Codes hab ich mir aus dem Internet zusammen gesammelt und nach besten Wissen abgeändert. Aber mein Wissen reicht nicht aus, die Variable strUser in die Abfrage zu bekommen..


Grüße
Dennis
nenofka
 

Re: Abfrage nach aktuellem Nutzer gefilter

Beitragvon knobbi38 » 09. Aug 2019, 14:00

Hallo Dennis,

deine Angaben sind leider nicht so hilfreich.
Eine API-Funktion "GetWindowsUser()" ist mir nicht bekannt, weiß also auch nicht, was die Funktion WindowsUser() genau zurück gibt.
Sind Bearbeiter und WindowsUser gleich und ist WindowsUser der Loginname?
Was steht in der Tabelle tblNutzer? Theroretisch müßte es eine Beziehung zwischen tblEska_gesamt und tblNutzer geben.

Normalerweise wird einfach eine WhereCondition in der Abfrage gemacht, z.B.
Code: Alles auswählen
SELECT * FROM tblEska_gesamt WHERE Bearbeiter = WindowsUser()

und diese Abfrage dient dann als Basis für das Formular, oder aber
beim Öffnen des Formulars gibts du diese Angabe als WhereCondition beim DoCmd.OpenForm mit.
Eine weiter Möglichkeit ist, einen entsprechenden Filter beim Öffnen des Formulars zu setzen.

Gruß Ulrich

Edit: Codeausschnitt lt. Yaslaw angepaßt.
Zuletzt geändert von knobbi38 am 09. Aug 2019, 14:09, insgesamt 1-mal geändert.
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1180
Registriert: 02. Jul 2015, 14:23

Re: Abfrage nach aktuellem Nutzer gefilter

Beitragvon Yaslaw » 09. Aug 2019, 14:02

@knobbi
Da ist dir im WHERE ein Vergleich zuviel drin
Code: Alles auswählen
WHERE Bearbeiter = WindowsUser() = "bla,bla,bla ..."
-- Es reicht
WHERE Bearbeiter = WindowsUser()
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements sind formatierbar)
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
Benutzeravatar
Yaslaw
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 2853
Registriert: 02. Jul 2014, 15:25
Wohnort: Winterthur

Re: Abfrage nach aktuellem Nutzer gefilter

Beitragvon knobbi38 » 09. Aug 2019, 14:11

@Yaslaw:
Das passiert, wenn man abgelenkt wird. Danke für deinen Hinweis und ich habe den Code-Ausschnitt angepaßt.
Gut, wenn noch einer mit ließt. :)

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1180
Registriert: 02. Jul 2015, 14:23

Re: Abfrage nach aktuellem Nutzer gefilter

Beitragvon nenofka » 09. Aug 2019, 14:20

Sorry, wenn meine Angaben nicht wirklich hilfreich sind. Aber ich versuche mal ein bisschen Klarheit zu schaffen:

- Angemeldeter Windows-Nutzer: A33349752
- mit GetWindowsUser() wird dieser Nutzer ausgelesen
- in der Tabelle tblNutzer sind die Windows-Nutzernamen (A33349752) in der Spalte AKennung hinterlegt, mit den dazugehörigen Klarnamen (in diesem Fall Dennis) in der Spalte Name
- mit DLookup wird mit der ausgelesenen Windows-Nutzernamen die Umwandlung in den Klarnamen durchgeführt
- der Klarname wird dann automatisch in die Datensätze eingetragen

Ich habe jetzt mal in der SQL-Abfrage deinen Code eingegeben (FROM tblEska_gesamt WHERE Bearbeiter = WindowsUser()) bekomme dann aber folgende Fehlermeldung: Undefinierte Funktion "WindowsUser" in Ausdruck.

Danke und Grüße
Dennis
nenofka
 

Re: Abfrage nach aktuellem Nutzer gefilter

Beitragvon knobbi38 » 09. Aug 2019, 14:29

Hallo Dennis,

das sind schon mal die richtigen Infos.

Die Funtion "WindowsUser()" muß in einem Modul stehen, damit das geht.
Vielleicht baust du dir einfach mal die Afrage in der QBE zusammen und nimmst dafür den Ausdrucksgenerator zur Hand. Dann kannst du gleich das gewünschte Ergebnis ansehen. In der SQL-Ansicht könntest du dann später nochmal Hand anlegen und ggf. etwas optimieren oder so.

Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1180
Registriert: 02. Jul 2015, 14:23

Re: Abfrage nach aktuellem Nutzer gefilter

Beitragvon KlausMz » 09. Aug 2019, 15:20

Hallo,
der Klarname wird dann automatisch in die Datensätze eingetragen

wenn der Klarname in die Tabelle eingetragen wird (warum eigentlich?) muss auch nach dem Klarnamen gefiltert werden und nicht nach dem WindowsUser.
Gruß
Klaus . . . . . Feedback wäre wünschenswert.
Ich möchte bitte keine unaufgeforderten PN. Fragen bitte im Forum.
Benutzeravatar
KlausMz
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 39041
Registriert: 06. Okt 2003, 15:09
Wohnort: Irgendwo in der Pfalz

Re: Abfrage nach aktuellem Nutzer gefilter

Beitragvon nenofka » 09. Aug 2019, 15:31

Hallo,

es hat funktioniert! Danke!

Ich hab mir einen neuen Code gesucht, um den Windows-User auszulesen und habe diesen dann mit wieder mit DLookup umgewandelt in den Klarnamen.
Hier der Code den ich genutzt habe:
Code: Alles auswählen
Option Compare Database
Option Explicit
 
Private Declare Function apiGetUserName Lib "advapi32.dll" _
                         Alias "GetUserNameA" (ByVal lpBuffer As String, _
                                               nSize As Long) As Long
 
Function fOSUserName() As String
     Dim lngLen As Long, lngX As Long
     Dim strUserName 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
     
End Function

Function fUser() As String
    Dim strUser As String
   
    fUser = DLookup("VorNachname", "tblNutzer", "AKennung = '" & fOSUserName & "'")

End Function


Das Ganze als Funktion gespeichert und bei der Abfrage in der Spalte Benutzer als Kriterium über den Ausdruckgenerator eingefügt.
Den Klarnamen lasse ich aus Komfortgründen eintragen, zur Besseren Übersicht, wer was gemacht hat.

Eine letzte Frage, da ich es aktuell nicht testen kann:
Wenn ich die Datenbank von einem anderen Nutzeraccount wieder aufrufe, funktioniert das mit der bestehenden Abfrage und dem darauf aufbauenden Formular oder muss die Abfrage neu erstellt werden?

Grüße und Vielen Dank!!
Dennis
nenofka
 

Re: Abfrage nach aktuellem Nutzer gefilter

Beitragvon knobbi38 » 09. Aug 2019, 17:02

Hallo Dennis,

das funktioniert natürlich auch mit einem anderen Account mit der gleichen Abfrage.

Noch ein Hinweis:
Wie Klaus schon angemerkt hat, sollte der Klarname nur an einer Stelle gespeichert werden (tblNutzer) und in alle anderen Tabellen gehört nur ein Verweis (Fremdschlüssel) auf diesen Eintrag. Um dann den Klarnamen anzuzeigen, genügt eine Textbox mit Domwert als Ausdruck, z.B. im Formularkopf.

Grüße Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1180
Registriert: 02. Jul 2015, 14:23


Zurück zu Access Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: Beaker s.a., fataimerson und 8 Gäste