Treeview

spirit

Erfahrenes Mitglied
Hallo Community

Ich habe ein kleines Problem mit der Erstellung von einem Treeview.
Hintergrund: Ich möchte eine Ansicht erstellen, in der der Baum von einem Windows AD dargestellt wird.
Darin enthalten sind Hauptgruppe, möglicherweise eine Untergruppe und dem Computerobjekt.

Mit einem Script phpScript lese ich das AD aus und es wird mir der Baum auch im Browser so angezeigt wie ich es möchte. Für die Ausgabe verwende ich ich folgendes Script mit einer rekursiven Lesung:
PHP:
function read($parent) {
    $query = "SELECT * tabellewhere parent = '".$parent.  "' order by item";
    $res = mysqli_query($db, $query) or die(mysqli_error($db));

while ($data = mysqli_fetch_assoc($res)) {
    echo $data['item']."\n";
    thomas($data['id']);
}

Jetzt habe ich versucht die Darstellung mit einem Treeview abzubilden:

Visual Basic:
rs.Open "select * from WINDOWS_AD_LIST where parent = " & parent & " order by item", conn
    If rs.RecordCount > 0 Then
        rs.MoveFirst
 
        Do While Not rs.EOF
 
            If rs.Fields(2).Value = 0 Then
            TreeView1.Nodes.Add , , , rs.Fields(1).Value
        End If
   End If
   readData (rs.Fields(0).Value)
   rs.MoveNext
   Loop
End If

eigendlich der gleiche Code aber hier funktioniert die Rekursion nicht. Kann hier jemand einen Fehler erkennen?

Für eurere Hilfe bedanke ich mich im voraus!!
 
Zuletzt bearbeitet von einem Moderator:

Yaslaw

n/a
Moderator
Hab mal das ganze in PHP/VB Tags gesetzt...
Wie sieht denn der Anfang der VB-Funktion aus?
 

Yaslaw

n/a
Moderator
Nein, ist es nicht.
Da ist ein end if ohne ein startender IF.
Und was ist readData() für eine Funktion die du da aufrufst?
 

Yaslaw

n/a
Moderator
Schon der PHP-Code ist a) Fehlerhaft (wird so nur Fehler werfen) und b) nicht rekursiv. Den kann man also gleich spühlen.

Zeig doch mal die Datenstruktur. Dann können wir zusammen was basteln.
 

spirit

Erfahrenes Mitglied
oh doch....der php Code funktioniert sogar wunderbar.


Die Datenstrucktur ist recht einfach:

id strname parent leaf
1 gruppe1 0 0 ; Hauptgruppe
2 subgruppe1 1 0 ; Untergruppe
3 client1 2 1 ; Rechnername
4 client2 2 1 ; Rechnername
usw.

jetzt besteht die Aufgabe darin, mit einem Query die Rechner sortiert nach den Haupt und Untergruppen auszulesen . Mit dem PHP Code funktioniert das!!!
 

Yaslaw

n/a
Moderator
Möglich, dass es mit PHP funktioniert. Aber garantiert nicht mit dem geposteten Code. Das SQL wirft GARANTIERT einen Fehler. Es fehlt das Wort FROM und vor dem WHERE fehlt ein Leerzeichen.

Du hast sowieso ein Chaos. In Deinem VB-Versuch heisst das Ding item. In deinem letzten Posting strname.

Zum VBA: ungetestet
Visual Basic:
sub read(byval pid as Long)
   Dim sql  as String:        sql = "SELECT * FROM mytable AS t WHERE t.parent=" & pid & " ORDER BY t.strname "
   Dim rs   as dao.recordset: set rs = currentdb.openrecordset(sql)
  
   if rs.recordcount=0 then goto EXIT_HANDLER

   do while not rs.eof
      if rs!parent = 0 then
         me.tree.add ,, "k" & rs!id, rs!strname
      else
         me.tree.add "k" & pid, tvwChild, "k" & rs!id, rs!strname
      end if
      read rs!id
      rs.movenext
   loop

EXIT_HANDLER:
   rs.close: set rs=nothing
end sub

Wichtig ist, im Gegensatz zu deinem VB und PHP Beispiel: Die Funktion die du in der Schleife ausführst, sollte dieselbe sein
 

spirit

Erfahrenes Mitglied
Du hast recht.. die Fehler sind dadurch enstanden das ich auf der arbeit eine andere datenbank benutze...
Erstmal vielen Dank für deine Infos...ich werde gleich mal testen.... :)
 

spirit

Erfahrenes Mitglied
Jippy es funzt. Ein dickes Danke an Yaslaw!!

Hier die Lösung:

Da ich nicht mit DAO sondern ADO arbeite habe ich mal den Code etwas umgeschrieben:
Visual Basic:
Sub read(ByVal pid As Long)
  Dim sql  As String
  Dim rs As ADODB.Recordset
  Set rs = New ADODB.Recordset
  
  sql = "SELECT * FROM WINDOWS_AD_LIST AS t WHERE t.parent=" & pid & " ORDER BY t.item "
  
  rs.Open sql, conn
  If rs.RecordCount = 0 Then GoTo EXIT_HANDLER
  Do While Not rs.EOF
  If rs!Parent = 0 Then
  TreeView1.Nodes.Add , , "k" & rs!id, rs!Item
  Else
  TreeView1.Nodes.Add "k" & pid, tvwChild, "k" & rs!id, rs!Item
  End If
  read rs!id
  
  rs.MoveNext
  Loop
EXIT_HANDLER:
  rs.Close: Set rs = Nothing
End Sub
Na dann noch schönes Wochenende
 

Neue Beiträge