Ein in meinen Augen schwer lösbares Problem

cheeZy

Mitglied
Folgendes Problem:
In einer Tabelle stehen Usernummern (+ Userdaten)
In einer anderen Berechtigungsnummern (hier auch + Zusatzdaten)
In einer dritten Tabelle wird nun festgehalten, welcher User, welche Berechtigungen hat, er kann aber mehrere haben, also 1:n.

Nun möchte ich die Möglichkeit geben, diese Tabelle abzufragen. Dazu habe ich ein Formular erstellt. Dieses enthält 10 Kontrollkästchen gemäß den 10 Berechtigungen. Damit soll man nun Filtern können, also auswählen, welche Berechtigung man angezeigt bekommen möchte. Problem ist nun, dass der User nur angezeigt werden soll, wenn er auch alle ausgewählten Berechtigungen hat.

Ich habe es nämlich erst so versucht, per VBA die Abfrage zu bearbeiten, dass ich die WHERE-Klausel mit Kriterien fülle. Da ich hier aber ein OR eingefügt hab, klappt das nicht so ganz.

Beispiel:
Wenn ich sage, zeige mir alle Benutzer an, die die Berechtigungen 1 und 2 haben, dann zeigt er mir nun natürlich auch User an, die nur 1 oder nur 2 haben.

Wie bekomme ich das nun hin?

Ich kann ja nicht einfach in das Kriterium das OR durch ein AND ersetzen, weil ja in keinem Datensatz ein User 1 und 2 hat, denn das sind dann zwei Datensätze.

Eine unschöne Möglichkeit wäre, eine weitere Tabelle zu erstellen, die zum einen den Username enthält und 10 Spalten für die Berechtigungen, als Ja/Nein-Felder, die dein ein Ja haben, falls der User die jeweilige Berechtigung hat.

Habt ihr Ideen?

Danke

Carsten.
 
Wegen der Bezeichnung hast du vollkommen recht, nur leider ist mir keine kurze und zugleich aussagekräftige eingefallen :)

Aber wie genau ich daraus ne Kreuztabelle erstellen soll, versteh ich leider nicht. :confused:

Links in die Spalte die Usernames, oben als Spaltenüberschriften die Berechtigungen und dann in die Mitte die Anzahl? Also als Werte.

grüße
Carsten :eek:

Version ist Office 2003
 
Zuletzt bearbeitet:
Hi,

Aber wie genau ich daraus ne Kreuztabelle erstellen soll, versteh ich leider nicht. :confused:

Links in die Spalte die Usernames, oben als Spaltenüberschriften die Berechtigungen und dann in die Mitte die Anzahl? Also als Werte.

Wie das dann aussehen soll, musst Du schon selber wissen. ;)

Version ist Office 2003

Das ist kein DBMS.

Ich arbeite aber auch nicht mit MS-Programmen, in denen man sich Abfragen bzw. Berichte zusammenklicken kann. Da kann ich Dir nicht helfen. Google halt mal nach "Kreuztabellenabfrage <Dein DBMS>".

LG
 
Ja, deine Idee ist schon nicht schlecht und erstmal natürlich herzlichen Dank, dass du Gedanken gemacht hast, nur ich glaube, eine Kreuztabelle bringt nicht ganz die gewünschten Ergebnisse, denn ich möchte nur zwei Spalten haben, in einer soll der Username stehen, in der anderen die Berechtigung.
Ich hab jetzt ne Idee. Ich würde es so machen, dass ich für jede Berechtigung einen Abfrage machen, sprich, da steht dann jeder User drin, der diese Berechtigung hat. 10 mal. Nun würde ich einfach die Abfrageergebnisse der gewünschten Berechtigungen mit einem Union vereinigen :) so hätte ich dann doch eigentlich mein Ergebnis, oder?
 
Hi,

Ja, deine Idee ist schon nicht schlecht und erstmal natürlich herzlichen Dank, dass du Gedanken gemacht hast, nur ich glaube, eine Kreuztabelle bringt nicht ganz die gewünschten Ergebnisse, denn ich möchte nur zwei Spalten haben, in einer soll der Username stehen, in der anderen die Berechtigung.

Wenn jetzt aber 5 Berechtigungen gewünscht sind, würde ja jeder passende Benutzer 5 mal in der Liste auftauchen. Sicher, dass du das so haben willst?

Ich hab jetzt ne Idee. Ich würde es so machen, dass ich für jede Berechtigung einen Abfrage machen, sprich, da steht dann jeder User drin, der diese Berechtigung hat. 10 mal. Nun würde ich einfach die Abfrageergebnisse der gewünschten Berechtigungen mit einem Union vereinigen :) so hätte ich dann doch eigentlich mein Ergebnis, oder?

Hmmm, schön ist das aber nicht gerade. Vielleicht hilft Dir auch eine Gruppierung in Verbindung mit einer Having-Klausel. Ich weiß leider immer noch nicht, wie denn Dein Ergebnis aussehen soll (nicht optisch, sondern das Resultset). Und welche Datenbank dahinter liegt, hast Du auch noch nicht verraten...

LG
 
Also ich arbeite mit Microsoft Access 2003.

Das der Name dann 5 mal auftaucht, wäre dann erstmal vollkommen ok! Oder man macht es einfach so, dass man ausschließlich den Username selektiert und diesen gruppiert, bzw DISTINCT benutzt.
Also soll es dann so aussehen, dass es eine Spalte gibt, die alle Usernamen enthält, welche die gewählten Berechtigungen hat :)

grüße carsten =)
 
Hi,

Oder man macht es einfach so, dass man ausschließlich den Username selektiert und diesen gruppiert,

so würde ich das machen. Das schränkst Du dann mit einer passenden Having-Klausel auf die Benutzer ein, die die geforderten Berechtigungen haben:

Pseudocode (5 Rechte gefordert):
Code:
HAVING SUM(IF berechtigung IN geforderte_berechtigungen THEN 1 ELSE 0) = 5


Wie die genaue Syntax bei Access aussieht, weiß ich nicht, das musst Du halt nachschlagen.

LG
 
Zurück