April 18, 2021, 00:51:11

Neuigkeiten:

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


Userspezifische Anzeige von Datensätzen im Endlosformular

Begonnen von PM HWSI, März 22, 2021, 10:40:54

⏪ vorheriges - nächstes ⏩

PM HWSI

Hallo,

wir haben ein Problem mit der Darstellung in einem Endlosformular.

Ausgangspunkt sind zwei Formulare:

1. ein Formular, das von allen Usern benutzt wird, um Daten zu erfassen. Hier wird der angemeldete Office-User mittels der GetUser-Funktion GetUserName = Environ("UserName") eingetragen.
Zu einem späteren Zeitpunkt sollen die Daten vervollständigt werden, wozu ein zweites Formular aufgerufen wird.

2. In diesem Endlosfomular sollen für die jeweiligen User nur die in 1. von dem User angelegten Datensätze sichtbar sein.

Wir hatten angenommen, dass wir mit einer zweiten GetUser-Abfrage und einem Vergleich mit dem Wert, der bereits in der Tabelle vorhanden ist (aus dem Eintrag unter 1.) die Darstellung der Datensätze filtern können.

Leider ist das nicht der Fall, was könnte hier die Lösung sein?

Bereits jetzt 1000 Dank für einen Lösungsvorschlag.

PM HWSI

andyfau

Hallo Die Benutzer können durchaus unterschiedlich sein.
Schon mal mit CurrentUser probiert?

Weitere Erläuterungen unter:

https://microsoft-programmierer.de/Office-365/Access/vba/MS-Access_colon_-Aktueller-Benutzer-abfragen?2137

PM HWSI

Hallo andyfau,

Danke für die schnelle Antwort!
Die Userabfrage funktioniert mit GetUser ganz fantastisch, leider nur nicht der Abgleich im zweiten Formular, um die Daten zu filtern und für den aktuellen User nur die Daten anzuzeigen, die er/sie vorher auch eingegeben hat.

Diese Lösung suchen wir!

1000 Dank.

andyfau

Hast Du den GetUser-Rückgabewert auch auf die Länge geprüft und nur den linken Teil des Usernamens in das Feld geschrieben? Vielleicht hängen da noch ein paar Blanks dran.

PM HWSI

Eigentlich kann das nicht sein, weil wir in beiden Fällen den Wert mit der gleichen GetUser-Funktion (s.o.) holen.
In den beiden Kontrollfeldern im Formular wird auch jeweils das Userkürzel korrekt angezeigt.
Unser Code für den Abgleich heißt so:

DoCmd.OpenForm "frmÄrzteErledigteFälle", acNormal, , "[mflUser] = " & Me!mflUser & " Is  [Text30] = " & Me!Text30

Wobei mflUser das Feld aus dem ersten Formular ist und Text 30 das ungebundene Textfeld für den Abgleich.

Die Fehlermeldung sieht wie folgt aus:

******
Laufzeitfehler 3075:

Ungültige Verwendung des IS-Operators in Abfrageausdruck '[mflUser] = CO Is [Text30] = C'
******

Danke für die Hilfe!


ebs17

Bei einem Laufzeitfehler (falsche Syntax) erwartest Du einen gültigen Vergleich?

Der Ansatz als Kriterium für das OpenForm ist für sich schon sehr falsch.
Mit freundlichem Glück Auf!

Eberhard

PM HWSI

Lieber ebs17,

das haben wir befürchtet. :o  Was wäre denn der richtige Ansatz?

Wir sind wirklich blutige Anfänger, das bitten wir dabei uns nachzusehen.  :-\ 

Danke ... für die Hilfe und die Geduld!

andyfau

Hallo,
das Grundproblem ist dann ja eigentlich, dass Du ein und dieselbe Tabelle nur in zwei verschiedenen Ansichten darstellen/bearbeiten willst. Also würde ich zuerst zwei getrennte Abfragen erstellen: "qAlle" und "qNurbestimmterBenutzer". In den Kriterien von qNurbestimmterBenutzer das (Tabellen)Feld auf den Benutzer einschränken. Dazu im Kriterium eintragen:
   =Benutzer()    (Funktion, siehe unten, in ein Modul als Public Function setzen)
Dann ein Formular mit Datensatzquelle qAlle zur Pflege der Daten erstellen.
Dann ein Formular mit der dann ja eingeschränkten Datensatzquelle qNureinbestimmterBenutzer zur Nachpflege durch den einzelnen Benutzer anlegen.
*******************
Private Declare ptrsafe Function GetUserName _
Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

'Die Deklaration muss ausserhalb der eigentlichen Funktion in das Modul oder UserForm eingefügt werden, 'vorzugsweise unterhalb von:

Option Compare Database
Option Explicit

'und hier die eingentliche Funktion:
Public 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

Beaker s.a.

März 22, 2021, 14:33:42 #8 Letzte Bearbeitung: März 22, 2021, 16:29:34 von Beaker s.a.
Hallo,
@andreas
Das Auslesen des Benutzernamens ist wohl nicht sein Problem.

@PM HWSI
ZitatWobei mflUser das Feld aus dem ersten Formular ist und Text 30 das ungebundene Textfeld für den Abgleich.
Nein, "mflUser" ist ein Feld in der DS-Herkunft des Forms "frmÄrzteErledigteFälle".
DoCmd.OpenForm "[frmÄrzteErledigteFälle]", acNormal, , "mflUser = '" & [Text30] & "'"
gruss ekkehard

!Vermeide Sonderzeichen in Objekt-/Variablennamen, das spart die []; -
[frmÄrzteErledigteFälle] ... mflUser
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

andyfau

@Beaker s.a.
Zitat von: Beaker s.a. am März 22, 2021, 14:33:42Das Auslesen des Benutzernamens ist wohl nicht sein Problem.
Nein, das war auch nicht Sinn meiner Erläuterung, sondern nur der Vollständigkeit halber mit angefügt.
Es geht um den Weg, wie man aus einer Tabelle zwei verschiedene Ansichten zur Pflege der Daten erstellt.
Und das ist meiner Ansicht nach mit getrennten Formularen, wonach auch im ersten Post gefragt wurde, so wie ich es beschrieben habe, einfach und schnell gelöst.
Es führen wie immer viele Wege nach Rom.

PM HWSI

Hallo zusammen,

vielen Dank für die Hinweise, wir arbeiten uns gerade durch.

Zitat von: andyfau am März 22, 2021, 14:29:31In den Kriterien von qNurbestimmterBenutzer das (Tabellen)Feld auf den Benutzer einschränken. Dazu im Kriterium eintragen:

Welches (Tabellen) Feld ist hier gemeint?

Danke für die Info!

DF6GL

Hallo,

Zitat2. In diesem Endlosfomular sollen für die jeweiligen User nur die in 1. von dem User angelegten Datensätze sichtbar sein.

wenn es ein bestimmtes Form sein soll, das nur die dem angemeldeten User zugeordneten DS anzeigen soll, dann schreib in die Datenherkunft dieses Forms:


Select * from tblDieTabelle Where Erfasser =  GetUserName ()



wobei "Erfasser" das Tabellenfeld der Tabelle "tblDieTabelle" ist, in das der Username eingetragen wurde.

andyfau

Zitat von: PM HWSI am März 23, 2021, 13:28:17Welches (Tabellen) Feld ist hier gemeint?

Im Abfrageentwurf wählst du ja die Felder aus, die im Ergebnis angezeigt werden sollen. In der Spalte, die den Benutzernamen enthält, kannst Du in der Zeile "Kriterien" die oben beschriebene Funktion aufrufen:
=Benutzer()

PM HWSI

Zitat von: DF6GL am März 23, 2021, 14:24:13wobei "Erfasser" das Tabellenfeld der Tabelle "tblDieTabelle" ist, in das der Username eingetragen wurde.

Das scheint zu funktionieren *happy*
1000 Dank an alle, die sich an der Problemlösung beteiligt haben - tolles Forum.

PM HWSI


PM HWSI

THEMA GELÖST - aber wo ist der Knopf dafür? :-)

Zitat"Neuigkeiten:

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