AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Abfrage über mehrere Tabellen
Thema durchsuchen
Ansicht
Themen-Optionen

Abfrage über mehrere Tabellen

Ein Thema von hirnstroem · begonnen am 25. Mai 2007 · letzter Beitrag vom 1. Jun 2007
Antwort Antwort
hirnstroem

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

Abfrage über mehrere Tabellen

  Alt 25. Mai 2007, 12:26
Datenbank: MS Access • Version: kA • Zugriff über: ADO
'loha Folks,

ich benötige etwas Hilfe. Im angehängten Bild sind die Beziehungen einiger Tabellen dargestellt.

Die Abfrage soll folgende Felder liefern:
Key.Code, Key.KeyID, Device_User.Access, Device_User.DeviceID

Der einzige Parameter für die Abfrage ist eine DeviceID.

In der Tabelle Device_User sowie Device_Key sind immer sämtliche Einträge aus der jeweils linken und rechten Tabelle vorhanden, in User_Key ist dies nicht der Fall.

Die Abfrage wird benötigt um Schlüssel auf Geräte zu Programmieren. Wenn ein Schlüssel mit einer Person in Beziehung steht, sollen dessen Zutrittsrechte übernommen werden, ansonsten wird der Zutritt verwehrt.

Leider sind meine bisherigen Versuche eine Abfrage zusammenzuschustern kläglich gescheitert. Ich hoffe deshalb auf etwas Beihilfe.

Meine bisherige, von Access verunstaltete Abfrage sieht so aus und liefert nur das Gewünschte Ergebnis wenn einem User ein Key zugeordnet ist. Vielleicht kann man darauf aufbauen:

[code=sql]
SELECT [Key].[Code], [Key].[KeyID], [Device_User].[Access], [Device_User].[DeviceID]
FROM ([User] INNER JOIN (([Key] INNER JOIN Device_Key ON [Key].[KeyID]=[Device_Key].[KeyID]) INNER JOIN User_Key ON [Key].[KeyID]=[User_Key].[KeyID] Or [User_Key].[KeyID] Is Null) ON [User].[UserID]=[User_Key].[UserID] Or [User_Key].[UserID] Is Null) INNER JOIN Device_User ON [User].[UserID]=[Device_User].[UserID]
WHERE [Device_User].[DeviceID]=[eviceID] And [Key].[KeyID]=[Device_Key].[KeyID] And ([User].[UserID]=[User_Key].[UserID] Or [User_Key].[UserID] Is Null)
GROUP BY [Key].
Code:
, [Key].[KeyID], [Access], [Device_User].[DeviceID];
Ich bin mir langsam auch nicht mehr sicher ob sich das gewünschte Resultat mit nur einer Abfrage realisieren lässt -.-

Grüsse
hirnstroem
Miniaturansicht angehängter Grafiken
qry_appendkey_174.jpg  
inde deus abest
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#2

Re: Abfrage über mehrere Tabellen

  Alt 25. Mai 2007, 12:51
Hallo,

ich habe es nicht getestet, aber versuch es mal so:
SQL-Code:
SELECT A.Code, A.KeyID, D.Access, D.DeviceID
FROM Key A
JOIN Device_Key B ON B.KeyID = A.KeyID
JOIN Device C ON C.DeviceID = B.DeviceID
JOIN Device_User D ON D.DeviceID = C.DeviceID
JOIN User E ON E.UserID = D.UserID
JOIN User_Key F ON F.UserID = E.UserID
AND F.KeyID = A.KeyID
WHERE D.DeviceID = :Param
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
hirnstroem

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

Re: Abfrage über mehrere Tabellen

  Alt 25. Mai 2007, 13:14
Argh, wenn ich das in ein von Access akzeptiertes Format bringen würde, bestünde die Möglichkeit, dass das funktioniert. Aber momentan sehe ich mich ausser Stande dies zu vollbringen. Aiaiai.

Aber vielen Dank schon einmal.
inde deus abest
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#4

Re: Abfrage über mehrere Tabellen

  Alt 25. Mai 2007, 13:15
Da kann ich Dir leider auch nicht helfen, von Access hab ich keine Kelle.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
hirnstroem

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

Re: Abfrage über mehrere Tabellen

  Alt 25. Mai 2007, 13:18
Kein Problem. Ich bin ja auch nicht davon ausgegangen, dass mir jemand die fixfertige lösung präsentiert. Access ist Krieg!
inde deus abest
  Mit Zitat antworten Zitat
hirnstroem

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

Re: Abfrage über mehrere Tabellen

  Alt 25. Mai 2007, 14:11
Ich habe mich nun voller Verzweiflung an Access "Profis" gewendet (http://www.office-loesung.de/ftopic1...asc.php#616066) und werde bei hoffentlich noch eintretenden Fortschritten hier die Lösung aufführen.
inde deus abest
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#7

Re: Abfrage über mehrere Tabellen

  Alt 25. Mai 2007, 14:12
Dann bin ich aber gespannt, wie das dann aussieht.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
hirnstroem

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

Re: Abfrage über mehrere Tabellen

  Alt 1. Jun 2007, 11:43
Die Access "Profis" wollen nicht helfen -.-

Vorläufig habe ich zwei verschiedene Abfragen im Einsatz, die eine ruft sämtliche Schlüssel ohne Benutzer ab, die andere jene mit Benutzer. Die Daten werden dann letztenendes in zwei getrennten Schleifen abgearbeitet.

Und wenn man das so macht, schafft man es auch Access-konforme Abfragen zu schreiben.

Schlüssel ohne Benutzer:

SQL-Code:
SELECT *
FROM Device_Key, [Key]
WHERE Device_Key.KeyID = [Key].KeyID AND Device_Key.DeviceID = :DeviceID
AND NOT EXISTS (SELECT * FROM User_Key WHERE User_Key.KeyID = [Key].KeyID);
Schlüssel mit Benutzer:
SQL-Code:
SELECT
Key.KeyID, Key.Code, Device_User.Access, Device_Key.DeviceID, Device_User.DeviceID
FROM
([User] INNER JOIN Device_User ON User.UserID = Device_User.UserID) INNER JOIN (([Key] INNER JOIN Device_Key ON Key.KeyID = Device_Key.KeyID) INNER JOIN User_Key ON Key.KeyID = User_Key.KeyID) ON User.UserID = User_Key.UserID
WHERE
Device_Key.DeviceID=:1DeviceID
AND
Device_User.DeviceID=:2DeviceID;
inde deus abest
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz