Hallo Zusammen,
folgende Situation: Je nach dem wer sich in der DB anmeldet, kann er nur die Datensätze sehen welcher Abteilung er zugeordnet ist.
Dies geschieht mit einem Filterkriterium in der Abfrage:
Für jede Abteilung wird ein zweistelliger Buchstabencode wie z.B. ,,SC" verwendet. Dieser findet sich z.B. unter ,,Personal.OK" und im Anmeldeformular ,,UG_frm_Formauswahl_Allg.OKGlobal" und müssen dann eben Gleich sein.
Teilcode:
...
WHERE (((Personal.OK)=[Forms].[UG_frm_Formauswahl_Allg].[OKGlobal]) AND ...
...Gesamter Beispielcode:
SELECT Personal.NameP, DatePart("yyyy",Date()-[GebDatum]+2)-1900 AS [Alter], Ortsteile.Ort, Ortsteile.FW_Bezeichn, Personal.OK
FROM tblLehrgangTitel INNER JOIN (tblLehrgang INNER JOIN ((Ortsteile INNER JOIN Personal ON Ortsteile.Ortkenn = Personal.Ortkenn) INNER JOIN tblRegistrierungLehrg ON Personal.PID = tblRegistrierungLehrg.PID_F) ON tblLehrgang.LehrgangID = tblRegistrierungLehrg.LehrgangID_F) ON tblLehrgangTitel.LehrgangTitelID = tblLehrgang.LehrgangTitelID_F
WHERE (((Personal.OK)=[Forms].[UG_frm_Formauswahl_Allg].[OKGlobal]) AND ((Personal.statusID_P)=1 Or (Personal.statusID_P)=2) AND ((tblLehrgang.LehrgangTitelID_F)=7) AND ((tblRegistrierungLehrg.StatusRegID_F)=2))
ORDER BY DatePart("yyyy",Date()-[GebDatum]+2)-1900 DESC;
Was neu wird. Es soll nun übergeordnet die Verwaltung auf alle Datensätze zugreifen können.
Der Buchstabencode für die Verwaltung wäre ,,YY".
Jetzt hätte ich an eine WENN DANN SONST Funktion gedacht.
In eigenen Worten:
Wenn OKGlobal<>"YY" ; Personal.OK= OKGlobal ; "Filter auf die Spalte Personal.OK nicht anwenden" )
Versucht habe ich es so, funktioniert aber nicht:
...
WHERE (((Personal.OK)=IIf([Forms].[UG_frm_Formauswahl_Allg].[OKGlobal]<>"yy",[Personal.OK]=[Forms].[UG_frm_Formauswahl_Allg].[OKGlobal],"*")) AND ...
...
Hätte jemand eine Idee?
Gruss
mad
* als Platzhalter für beliebige Zeichen funktioniert nur in Kombination mit dem LIKE-Operator.
Du könntest anstelle von "*" für den Alternativen Ausdruck Personal.OK schreiben.
Danke Phils,
habe jetzt den Teilbereich des Codes wie folgt angepaßt:
...
WHERE (((Personal.OK)=IIf([Forms].[UG_frm_Formauswahl_Allg].[OKGlobal]<>"yy",[Personal.OK]=[Forms].[UG_frm_Formauswahl_Allg].[OKGlobal],[Personal.OK])) AND ...
...
Das SONST ..,[Personal.OK].. funktioniert jetzt, aber leider das DANN ..,[Personal.OK]=[Forms].[UG_frm_Formauswahl_Allg].[OKGlobal],.. noch nicht.
An was könnte das nun liegen?
Gruss
mad
Hallo mad,
Mir kommt das alles ziemlich kompliziert vor für ein einfaches Login.
Die Abfrage habe ich allerdings in der "Formatierung" nur kurz überflogen.
Was hat die denn mit dem Login zu tun? Wozu dient die? Als DS-Herkunft
eines HFo erscheint sie mir (selbst wenn aktualisierbar) mit den ganzen
Joins eher ungeeignet.
Wozu braucht du beim Login ein UFo?
Wenn ich es recht verstanden habe hast du doch nur zwei Zustände (darf alles
sehen/darf nur die Abt.daten sehen). Da reicht doch ein Boolean-Feld (bei mir
heisst das "IstAdmin) um das zu unterscheiden.
Also nach Prüfung von User und PW holst du den Wert aus der MA-Tabelle und
kannst damit und dem Abt.-Kürzel den weiteren Ablauf steuern; - spezielles
Form öffnen oder ein allgem. Form mit entsprechendem Filter.
gruss ekkehard
P.S. Vielleicht zeigst du mal eine Bild des Beziehungsfensters.
Zitat von: mad am Januar 09, 2023, 14:57:22Das SONST ..,[Personal.OK].. funktioniert jetzt, aber leider das DANN ..,[Personal.OK]=[Forms].[UG_frm_Formauswahl_Allg].[OKGlobal],.. noch nicht.
?
[Personal.OK] ist aber nicht OK. ;-)
Entweder Personal.OK ohne die eckigen Klammern, oder einzeln geklammert: [Personal].[OK]
Und in deine Referenz auf das Formularsteuerelement gehören Ausrufezeichen und keine Punkte.
[Forms]![UG_frm_Formauswahl_Allg]![OKGlobal]
Hallo Zusammen,
@Beaker s.a.,
es gibt eben mehr Zustände, je nach Abteilungen.
Und mit den Kürzeln die sich in der Tabelle Personal im Feld OK stehen wird eben gesteuert welche Personen angezeigt werden. OK steht für Organisationskürzel:
Somit kann eben sein das je nach dem wer eingeloggt ist nur eine bestimmte Anzahl an DS angezeigt werden.
Wenn sich nun aber die Verwaltung einloggt "yy", dann sollen eben über alle Abteilungen hinweg alle DS (Personen) angezeigt werden.
@PhilS,
Habe nun folgendes ausprobiert:
...
WHERE ((([Personal].[OK])=IIf([Forms]![UG_frm_Formauswahl_Allg]![OKGlobal]<>"yy",[Personal].[OK]=[Forms]![UG_frm_Formauswahl_Allg]![OKGlobal],[Personal].[OK])) AND ..
...habe auch noch alle Punkte gegen Ausrufezeichen ausgetauscht.
Auch mal der eckigen Klammer um Personal.OK weggelassen.
Funktioniert aber nicht.
Immer noch gleiches Ergebnis:
ZitatDas SONST ..,[Personal.OK].. funktioniert jetzt, aber leider das DANN ..,[Personal.OK]=[Forms].[UG_frm_Formauswahl_Allg].[OKGlobal],.. noch nicht.
Gruss
mad
Hallo Zusammen,
habe nochmals schnell eine sehr kleine Test-DB erstellt.
Da kann man gut sehen, daß wenn man die Abfrage "Aktive" aufruft und dann SB oder BK eingibt das Abfrageergebnis leer bleibt, obwohl zwei bzw. drei DS angezigt werden müssten.
Wenn ich dagegen yy eingebe werden wie gewünscht alle fünf DS angezeigt.
Vielleicht hilf es ja.
Gruss
mad
Hab übersehen, dass der True-Part des IIF nicht korrekt war.
So sollte es passen:
...
WHERE
((([Personal].[OK])=IIf([Forms]![UG_frm_Formauswahl_Allg]![OKGlobal]<>"yy",[Forms]![UG_frm_Formauswahl_Allg]![OKGlobal],[Personal].[OK]))
AND ..
...
Funktioniert wie gewünscht.
Vielen Dank für die Unterstützung.
mad