title image


Smiley *tilt* ich raffs nicht: Treeview linearisieren
Halo Gemeinde,



ich steh irgendwie auf dem Schlauch:



Ich habe ein Treeview. Diese Treeview würde ich jetzt gerne linearisieren, um die Abhängigkeiten für Berechnungen "den Baum entlang" in SQL greifbar zu haben.



Beispiel (die Nummern sind die IDs)



1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

etc





Nun sollen ALLE NACHKOMMEN jeder ID in einer Tabelle erscheinen, und zwar so:



ID TeilID

1 1
1 2

1 3

1 4

1 5

1 6

1 7

1 8

1 9

1 10

1 11

1 12

1 13

1 14

1 15

1 16

2 2
3 3

4 4

4 5

4 6

4 7

4 8

4 9

4 10

4 11

4 12

4 13

4 14

4 15

4 16

etc...





Bildlich gesprochen soll also für jeden Ast "der ganze Unterast bis zur gleichen Ebene" zeilenweise weggeschrieben werden. Also alle Nachkommen (Kinder, Enkel, Großenkel...)



Der Treeview speist sich aus einer reflexiven Tabelle (ID, Parent_ID). Meinetwegen kann mein Retter die Totalhierarchie auch aus der Tabelle statt dem Treeview ableiten.



Hier mein Ansatz. Er geht aber nicht.



Sub HierarchieExpander(ndeMaster As MSComctlLib.Node, intIndentLevel As Long)



Dim lngMasterID As Long



With CurrentDb



lngMasterID = Mid(ndeMaster.Key, 2)



'Direktes Ergebnis

.Execute "INSERT INTO tblErgebnisbaum_Hierarchie (ID, TeilID) VALUES (" & lngMasterID & "," & Mid(ndeMaster.Key, 2) & ")"



'Wenn Tochter vorhanden, Tochter verarbeiten

If ndeMaster.Children > 0 Then

'nächsten Level ermitteln (Push)

intIndentLevel = intIndentLevel + 1

'Aufruf der Routine für den ersten Tochternode (Rekursion)

.Execute "INSERT INTO tblErgebnisbaum_Hierarchie (ID, TeilID) VALUES (" & lngMasterID & "," & Mid(ndeMaster.Child.Key, 2) & ")"

HierarchieExpander ndeMaster.Child, intIndentLevel

End If



If intIndentLevel 1 Then

'Nächsten Node anspringen

lngMasterID = Mid(ndeMaster.Key, 2)

Set ndeMaster = ndeMaster.Next



'Wenn ihn gibt, diesen ebenso behandeln

If TypeName(ndeMaster) "Nothing" Then

.Execute "INSERT INTO tblErgebnisbaum_Hierarchie (ID, TeilID) VALUES (" & lngMasterID & "," & Mid(ndeMaster.Key, 2) & ")"

HierarchieExpander ndeMaster, intIndentLevel

Else

'Wenn keine Nodes auf gleicher Ebene mehr vorhanden sind, Suchebene um 1 reduzieren (Popp)

intIndentLevel = intIndentLevel - 1

End If

End If



End With

End Sub





Aufruf dann mit HierarchieExpander Me.acxTreeView.Nodes(1), 1



Wer weiß Rat?



Rekursive Grüße

Martin
Atrus2711 ät gmx punkt net
Meine Beiträge zu MS Office betreffen stets Version 2000,
wenn nicht anders angegeben.




geschrieben von


Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: