AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Einer SQL Abfrage eine zusätzliche Bedingung hinzufügen
Thema durchsuchen
Ansicht
Themen-Optionen

Einer SQL Abfrage eine zusätzliche Bedingung hinzufügen

Ein Thema von hirnstroem · begonnen am 15. Jan 2008 · letzter Beitrag vom 16. Jan 2008
 
hirnstroem

Registriert seit: 21. Sep 2005
297 Beiträge
 
Delphi 2006 Professional
 
#1

Einer SQL Abfrage eine zusätzliche Bedingung hinzufügen

  Alt 15. Jan 2008, 15:36
Datenbank: MS Access • Version: kA • Zugriff über: ADO
'loha Folks,

der folgenden Abfrage soll eine Zusätzliche Bedingung hinzugefügt werden:

SQL-Code:
SELECT *
FROM
(Room INNER JOIN
  (Floor INNER JOIN
    (DeviceType INNER JOIN
      (Building INNER JOIN
        (Application INNER JOIN Device ON [Application].[ApplicationID] =[Device].[ApplicationID])
      ON [Building].[BuildingID] =[Device].[BuildingID])
    ON [DeviceType].[DeviceTypeID] =[Device].[DeviceTypeID])
  ON [Floor].[FloorID] =[Device].[FloorID])
ON [Room].[RoomID] =[Device].[RoomID])
WHERE
DeviceType.DeviceType = 'DeviceType';
Die Abfrage liefert sämtliche Geräte aus der Tabelle 'Device' mit dem Gerätetyp 'DeviceType' (sowie sämtliche miteinbezogene Felder).

Nun ist es so, dass es zusätzlich zu den Geräten auch Benutzer gibt. Diese Benutzer haben entweder zugriff auf ein Gerät oder keinen Zugriff. Die Abfrage soll nun so angepasst werden, dass sie nur noch Ergebnisse (Geräte) liefert, für welche der Benutzer der die Abfrage ausführt (dessen UserID etc. ist bekannt) auch zugriff hat. Zudem soll die Möglichkeit bestehen, dass wie bei der obigen Abfrage sämtliche Geräte abgefragt werden können.

Mein Versuch dies zu realisieren sieht folgendermassen aus:

SQL-Code:
SELECT *
FROM
(Room INNER JOIN
  (Floor INNER JOIN
    (DeviceType INNER JOIN
      (Building INNER JOIN
        (Application INNER JOIN Device ON Application.ApplicationID = Device.ApplicationID)
      ON Building.BuildingID = Device.BuildingID)
    ON DeviceType.DeviceTypeID = Device.DeviceTypeID)
  ON Floor.FloorID = Device.FloorID)
ON Room.RoomID = Device.RoomID) INNER JOIN Device_User
ON Device.DeviceID = Device_User.DeviceID
WHERE
DeviceType.DeviceType = 'DeviceType'
AND
((Device_User.UserID = :UserIDIncorporateAccessRights AND Device_User.Access = True) OR :UserIDDoNotIncorporateAccessRights = 0);
Der eine Teil der Bedingung nämlich, dass die Abfrage nur noch Ergebnisse liefert, für welche der Aufrufende Benutzer Rechte hat, wäre hiermit erfüllt indem der Parameter :UserIDIncorporateAccessRights mit der UserID des entsprechenden Benutzers gefüttert wird.

Der andere Teil, dass auch sämtliche Geräte ohne Berücksichtigung der Benutzerrechte, abgefragt werden noch nicht. Übergebe ich dem Parameter :UserIDIncorporateAccessRights einen Wert der nicht zutreffen kann und dem Parameter :UserIDDoNotIncorporateAccessRights den Wert 0 damit die Bedingung zutrifft, so wird das kartesische Produkt gebildet. So ist im Ergebniss also jedes Gerät soviele Male vorhanden, wie es Benutzer in der Datenbank gibt.

Kann ich nun das Ergebnis irgendwie derart filtern, dass ein Gerät nur einmal im Ergebnis vorkommt?

Für etwas Beihilfe bin ich sehr empfänglich und dankbar -.-

Grüsse
hirnstroem

PS: Ich hoffe man versteht, was isch schrieb.
inde deus abest
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz