Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Vorstellung eines NestedSet als TreeView mit Drag&Drop
zurück: SQL-Formatierer weiter: Popup-Infofenster Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Tutorial Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
Brutus5000
VBA-Gelegenheitsfrickler/lieber C# statt VBA


Verfasst am:
16. Okt 2012, 09:59
Rufname:

Vorstellung eines NestedSet als TreeView mit Drag&Drop - Vorstellung eines NestedSet als TreeView mit Drag&Drop

Nach oben
       Version: Office 2003

Hallo liebe Community,

nachdem mir dieses Forum schon unzählige Male weitergeholfen hat, möchte ich endlich die Möglichkeit wahrnehmen, etwas zurückzugeben.

Da ich zur Zeit auf einer Access-File-Datenbank eine Hierarchie abbilden muss, und diese in SQL keine Rekursionen unterstützt, blieb mir nur die Implementierung eines NestedSet. Da anscheinend noch niemand eine ins Netz gestellt hab (jetzt weiß ich auch warum Confused ), habe ich mich selbst ans Werk gemacht.

Herausgekommen ist ein kleines Programm, welches aus meiner Sicht alle Basisoperationen am NestedSet durchführen kann:
  • Einfügen (unter, vor, hinter einen Knoten)
  • Löschen
  • Verschieben (unter, vor, hinter einen Knoten)
Auf Abfrageoperationen habe ich bisher verzichtet. Diese sind aber in Mike Hillyers grandiosem Tutorial (Managing Hierarchical Data in MySQL) dargestellt.

Zur Visualisierung im Formular habe ich auf ein TreeView zurückgegriffen. Um die Verschiebeoperationen umzusetzen, wurde der TreeView darüber hinaus mit Drag&Drop-Fähigkeit ausgestattet.

Um die verschiedenen Operationen zu verstehen, habe ich das ganze mal mit einem Excel-Modell durchgespielt. Dieses hänge ich ebenfalls an, da es ganz hilfreich ist, die notwendigen SQL-Statements herzuleiten zu verstehen.

Da ich kein professioneller Entwickler bin, habe ich an einigen Stellen sicher nicht so sauber gearbeitet. Für Verbesserungsvorschläge würde ich mich daher sehr freuen.

Wie funktioniert das ganze?

Tabellenaufbau
Das eigentliche NestedSet ist als simple Tabelle definiert.
ID | name | lft | rgt
lft und rgt stellen dabei die äußeren Grenzen der Menge dar.

VBA-Struktur
Insgesamt gibt es 3 VBA-Module:

Die Klasse NSNode stellt einen einzelnen Knoten des NestedSet dar. Jeder NSNode kann nach Erzeugung mit den Daten des Root-Knoten gefüllt werden oder ein Recordset auslesen, um sich und rekursiv alle seine Kinder auszulesen.
Mit einem nach der linken Grenze sortierten SELECT auf die Gesamttabelle, kann damit vom Root-Knoten aus die komplette Struktur des NestedSet rekursiv eingelesen werden. Darüber hinaus kann sich jeder Knoten und rekursiv alle seine Kinder in ein TreeView darstellen.

Das Modul NodeCollection bietet statischen Zugriff auf alle Knoten. Hier können alle Basisoperationen durchgeführt werden. Wichtig: Nach jeder Veränderung wird die NodeCollection verworfen und komplett neu geladen. Das ist sicher nicht performant, aber es vermeidet, dass alle relationalen Änderungen am NestedSet auch noch in den Objekten nachgespielt werden müssen.
Die relationalen Änderungen einzelner Operationen erfolgen immer als Transaktion. Zwischendurch werden einzelne Knoten neu geladen (aus Vereinfachungsgründen).

Zu guter Letzt verbleibt noch der Formularcode. Dieser steuert die einzelnen Operationen der NodeCollection. Da es verschiedene Verschiebemethoden gibt, wurde eine ComboBox eingeführt, die den Verschiebemodus auswählbar macht.

Anwendung
Es bietet es sich an, die NestedSet-Tabelle mit weiteren Tabellen verknüpfen, in denen dann die weiteren Daten hängen. Bei den Abfrageoperationen werden die Tabellen dann gejoint.

Wichtig ist, dass immer ein Root-Knoten existiert. Außerdem muss sichergestellt sein, dass keine Verschiebungen von Knoten in sich selbst erfolgen. Das erzeugt immer Fehler! Wer die Testdaten zerschossen hat, kann im Excel-Sheet die gleichen nochmal finden.

Ich habe zwar alle Funktionen einmal durchprobiert, aber eine wirkliche fehlerfreiheit kann ich derzeit nicht garantieren. Anwendung geschieht daher auf eigene Gefahr. Daher würde ich mich besonders freuen, wenn das ganze von euch auf Herz & Nieren getestet wird Smile

Credits
Weder das Konzept vom NestedSet, noch der Drag&Drop-Code ist von mir. Leider habe ich mir die Namen der ursprünglichen Autoren nicht aufgeschrieben. Daher vielen Dank an die vielen fleißigen Bienen, die hier ihre Zeit für uns alle opfern!

Liebe Grüße
Brutus5000



NestedSet.zip
 Beschreibung:
Enthält die Beispieldatenbank und visuelle Darstellungen der möglichen Operationen am NestedSet in Excel.

Download
 Dateiname:  NestedSet.zip
 Dateigröße:  65.76 KB
 Heruntergeladen:  118 mal

JMalberg
Es wird so langsam sinnig ...


Verfasst am:
16. Okt 2012, 10:55
Rufname:
Wohnort: Saarbrücken

AW: Vorstellung eines NestedSet als TreeView mit Drag&Dr - AW: Vorstellung eines NestedSet als TreeView mit Drag&Dr

Nach oben
       Version: Office 2003

Deckt diese Klasse auch das Problem einer Mehrfachverwendung von Knoten ab, dh kann ein Knoten mehrfach in anderen Strukturen vorkommen?
Dies wird bei Stücklisten verwendet.

_________________
Gruß
Jürgen

Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie!
Brutus5000
VBA-Gelegenheitsfrickler/lieber C# statt VBA


Verfasst am:
17. Okt 2012, 15:37
Rufname:


AW: Vorstellung eines NestedSet als TreeView mit Drag&Dr - AW: Vorstellung eines NestedSet als TreeView mit Drag&Dr

Nach oben
       Version: Office 2003

Hallo JMalberg,

das ist bei den Knoten eines NestedSet nicht möglich. Jeder Knoten hat eine fest Position durch seine linke und rechte Grenze.

Es spricht aber nichts dagegen, die Knoten mit Fremdschlüsseln zu versehen. Du könntest die Texte ja dann aus einer zweiten Tabelle laden. Dafür müsstest du den SQL-Code beim Aufbau des TreeView in der Klasse NSNode anpassen.
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Access Formulare: Treeview Routine 6 Supermarc1 317 21. Aug 2013, 18:21
Supermarc1 Treeview Routine
Keine neuen Beiträge Access Formulare: TreeView read only 1 TobiasKarge 113 23. Jul 2013, 18:22
Bitsqueezer TreeView read only
Keine neuen Beiträge Access Formulare: Drop Down in bestehendes Formular einfügen 7 Chaosklingen 205 25. Okt 2012, 13:06
Chaosklingen Drop Down in bestehendes Formular einfügen
Keine neuen Beiträge Access Tabellen & Abfragen: Drop Down bei Abfrage für Bericht 8 Maddin77 4262 07. Okt 2012, 02:53
Willi Wipp Drop Down bei Abfrage für Bericht
Keine neuen Beiträge Access Formulare: Treeview: Knoten nicht anwählbar einstellen 1 Vandroy 494 18. Sep 2011, 14:45
Nouba Treeview: Knoten nicht anwählbar einstellen
Keine neuen Beiträge Access Formulare: Kalender als drop down 1 wesselo 1319 11. Feb 2011, 15:03
Nouba Kalender als drop down
Keine neuen Beiträge Access Formulare: Treeview in Registersteuerelement - Bug? 1 Turboscherbe 410 23. März 2010, 23:56
Turboscherbe Treeview in Registersteuerelement - Bug?
Keine neuen Beiträge Access Formulare: Eingabeformular Auswahl ind Drop Downliste stehen lassen. 0 Blade001 397 02. Apr 2009, 15:59
Blade001 Eingabeformular Auswahl ind Drop Downliste stehen lassen.
Keine neuen Beiträge Access Formulare: TreeView: Status der Checkboxen im Event nicht zu ändern 4 juliaxx 1925 27. Nov 2008, 11:06
juliaxx TreeView: Status der Checkboxen im Event nicht zu ändern
Keine neuen Beiträge Access Tabellen & Abfragen: Filtern mit Drop Down in neues Formular????? 5 seppel27 2109 14. Aug 2007, 09:07
Willi Wipp Filtern mit Drop Down in neues Formular?????
Keine neuen Beiträge Access Programmierung / VBA: TreeView und Drag&Drop 2 volta 2414 05. Mai 2006, 11:46
Stelli TreeView und Drag&Drop
Keine neuen Beiträge Access Formulare: Navigation in einem treeView 1 magnum 1015 26. Apr 2006, 21:03
magnum Navigation in einem treeView
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Microsoft Excel Tricks