Entwickler-Ecke
Datenbanken - Komplexe ADO Abfrage und Anzeige in einen TreeView
NetProg - Mi 28.12.11 19:03
Titel: Komplexe ADO Abfrage und Anzeige in einen TreeView
Hallo, liebe Forengemeinde.
Ich steh mal wieder vor einem Problem, und zwar hab ich eine Access - Tabelle welche in Delphi mittels ADO in einem JvDBTreeView (Jedi)
angezeigt wird, mit folgendem Aufbau:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| ID | PARENTID | PROJECTID | BEZEICHNUNG 1 | 0 | 19 | EG 2 | 1 | 19 | Achse A-D 3 | 1 | 19 | Achse E-G 4 | 0 | 19 | 1. OG 5 | 4 | 19 | Achse A-D 6 | 4 | 19 | Achse E-G usw. |
Und diese wird als TreeView anhand PARENTID so angezeigt:
EG
- Achse A-D
- Achse E-G
1.OG
- Achse A-D
- Achse E-G
In einer weiteren Tabelle habe ich jeweils ein Aufmaßblatt mit folgendem Aufbau:
Quelltext
1: 2: 3: 4: 5:
| ID | PROJECTID | GRUPPE | BEZEICHNUNG | ABMESSUNGEN 1 | 19 | 2 | Wand 1 | 3,45 * 3,36 2 | 19 | 3 | Wand 2 | 7,31 * 3,36 3 | 19 | 6 | Wand 1 | 2,25 * 1,25 usw. |
Nun zu meinem eigentlichen Problem , ich zeige nun mit folgendem SQL-Code die Gruppen an
zu denen noch kein Eintrag in der Aufmaßblatttabelle vorhanden ist.
Störend ist nur, sollte schon zu allen Kindeinträgen (PARENTID <> 0) bsp. im EG , Einträge im Aufmaßblatt vorhanden
sein, so wird dennoch der Elterneintrag (PARENTID = 0) als EG im Tree angezeigt.
EG
1.OG
- Achse A-D
- Achse E-G
Wie bekomme ich es hin, das halt nur Elterneinträge angezeigt werden wo auch Kindereinträge vorhanden sind.
SQL-Anweisung
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| SELECT Gruppen.ID, Gruppen.PARENTID, Gruppen.ProjektID, Gruppen.Bezeichnung FROM Gruppen
LEFT JOIN (SELECT DISTINCT Aufmasse.ProjektID, Aufmasse.Gruppe FROM Aufmasse WHERE Aufmasse.ProjektID = 19) AS GrAbfrage
ON Gruppen.ID = GrAbfrage.Gruppe
WHERE GrAbfrage.Gruppe IS NULL AND Gruppen.ProjektID = 19 |
Vielen Dank schonmal für Eure Hilfestellungen und einen guten Rutsch ins neue Jahr.
Moderiert von
Martok: SQL-Tags hinzugefügt
Moderiert von
Martok: Code-Tags hinzugefügt
bummi - Mi 28.12.11 22:08
ala ...
Quelltext
1:
| where ProjektID in (select Distinct ProjektID from Aufmasse) |
NetProg - Mi 28.12.11 22:20
Moderiert von
Narses: Komplett-Zitat des letzten Beitrags entfernt.
Danke erstmal für Deine schnelle Hilfe.
Könntest Du mir freundlicherweise bitte genau aufzeigen, wie bzw. wo ich die WHERE Klausel in meinen
Code aufnehmen sollte, ich hab gerade ein Blackout glaub ich ...
Danke Dir schonmal
bummi - Mi 28.12.11 22:51
naja entweder einfach
Quelltext
1: 2: 3:
| select * FROM Gruppen where ProjektID in (select Distinct ProjektID from Aufmasse) |
oder wenn Du mehr brauchst kannst Du ja erst mal über einen Left Join den Rest aus den Aufmassen hinzujoinen und dann die Where-Bedingung anhängen.
NetProg - Do 29.12.11 00:27
Moderiert von
Narses: Komplett-Zitat des letzten Beitrags entfernt.
Ich glaub ich hab da einen Punkt nicht erwähnt oder nicht korrekt erklärt, denn in der Aufmaßblatttabelle wird nie ein Elternobjekt eingetragen, sondern nur Kinderobjekte.
Die Elternobjekte (EG, 1.OG usw.) werden nur zu Gruppierungszwecken benutzt. Daher auch meine o.g. Abfrage. Aber wie gesagt wird, so bald für alle Kindeinträge des jeweiligen
Elternobjektes ein Aufmaßblatt vorhanden ist, auch das jeweilige Elternobjekt im Tree angezeigt. Was eigentlich nicht erwünscht ist, da zu diesem Elternobjekt kein weiteres
Aufmaßblatt angelegt werden kann. Vieleicht kann man auch das TreeView dazu bewegen nur Elterneinträge mit Kindeinträgen anzuzeigen ?????????????
Dennoch vielen lieben Dank erstmal an dich !
bummi - Do 29.12.11 09:44
Mir ist die Verknüpfung zwischen Deinen Tabellen nicht klar.
Ein anderer Ansatz wäre
- zuerst eine Sicht X zu bauen, FULL JOIN nicht LEFT
- Deine Menge wie bisher abzufragen mit der zusätzlichen Bedingung
Quelltext
1:
| WHERE bzw. AND ((ParentID <> 0) or (ID in (Select Distinct ParentID from X))) |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!