mysql Datenbank im Treeview darstellen

Lasand

Grünschnabel
Hallo Leute,
ich habe eine mysql Datenbank (test), diese hat eine Tabelle ( ordner).
Die Tabelle besteht aus ordner_index, ordner_name, ordner_parent.

Jetzt möchte die Tabelle ( ordner ) im Treeview darstellen.

Kann mir da jemand helfen ?
 
Hi Lasand,

wo genau liegt Dein Problem Im Zugriff auf die mySQL Datenbank? Im Umgang mit dem Treeview? In der Darstellung der Hirarchien Etwas genauer solltest Du schon sein.

Gruß
Das Orakel
 
Okey es klappt

Habe mal so angefangen....
---------------------------------------
RS.MoveFirst
Set MNode = TreeView1.Nodes.Add(, , "Fotoarchiv", "Fotoarchiv") '''ROOT
For i = 1 To RS.RecordCount - 1
Set ast = TreeView1.Nodes.Add(MNode, tvwChild, , RS!ordner_name) '''ROOT
RS.MoveNext
Next i
---------------------------------------
Die Anordnung im Treeview ist zur Zeit so :

fotoarchive
- Ordner_name
- Ordner_name
- Ordner_name
- Ordner_name
usw


Jeder ordner_name hat einen ordner_parent (Zahl) die auf den Ordner_index (Zahl) verweist.
So das es Unterordner gibt.
Ich weis jetzt nicht wie ich das anstellen soll.
 
Zuletzt bearbeitet:
Hi,

also dann von mir mal wieder eine These:

Die Tabelle "Ordner" repräsentiert eine Struktur. Es gibt also Einträge, die als "Root" dienen (Wie in Deinem Beispiel "Fotoarchiv"). Darunter gibt es nun wieder weitere "Childs".

Wenn dies korrekt ist, dann sollten sich in der Tabelle auch Einträge finden, die entweder keinen "ordner_parent" haben, oder bei denen der Wert von "ordner_parent" gleich 0 ist. Bei allen anderen steht im Feld "ordner_parent" ein Wert, der auf den Wert "ordner_index" in einem anderen Datensatz verweist.

Wenn diese Annahme korrekt ist, dann reden wir hier über eine rekursive Funktion, die in etwa so aufgebaut ist.

Code:
Prozedur BaueTreeView(ByVal nParent As Integer, _
                     ByVal oNode As Node)
    Suche Datensätze, bei denen "ordner_parent" gleich nParent ist

    If RS.RecordCount = 0
        Exit Sub
    End If

    For irgendwas = 1 To RS.RecordCount
        If oNode Is Nothing then
            Set MNode = TreeView1.Nodes.Add(, tvwFirst, RS!ordner_name, RS!ordner_name)
        Else
           Set MNode = TreeView1.Nodes.Add(oNode.Key, tvwChild, RS!ordner_name, RS!ordner_name)
        End If
        Call BaueTreeView(RS!order_index, MNode)
        RS.MoveNext
Ende Prozedur


Erster Aufruf

Call BaueTreeView(0, Nothing)

Ist nur mal so ein Ansatz.

Gruß
Das Orakel
 
Ich danke dir schon einmal für deine Mühe...

Habe deinen Code übernommen, aber es kommt leider ein Fehler
#####################################################################
Private Function bauetreeview(ByVal nParent As Integer, ByVal oNode As Node)
Dim i As Integer
Dim mNode As Node
If RS.RecordCount = 0 Then
Exit Function
End If

For i = 1 To RS.RecordCount
If oNode Is Nothing Then
Set mNode = TreeView1.Nodes.Add(, tvwFirst, RS!ordner_name, RS!ordner_name)
Else
Set mNode = TreeView1.Nodes.Add(oNode.key, tvwChild, RS!ordner_name, RS!ordner_name)
End If
Call bauetreeview(RS!ordner_parent, mNode)
RS.MoveNext
Next i
End Function
##########################################################################




"Schlüssel ist in Auflistung nich eindeutig"

und zwar in dieser Zeile

Set mNode = TreeView1.Nodes.Add(oNode.key, tvwChild, RS!ordner_name, RS! ordner_name)

Leider habe ich keine Ahnung warum...

Vielleicht haste ja ne Idee...

Gruss Lasand
 
Zuletzt bearbeitet:
Hi Lisand,

der dritte Parameter muß ein eindeutiger Key sein. Evtl. ist es hier besser mit dem "ordner_index" diesen Key zu füllen anstatt mit dem Namen. Wenn mich nicht alles täuscht, muss dieser Key alphanumerisch sein. Also irgendwas in der Art "A-" & RS!order_index. Kann's zur Zeit leider nicht testen.

Gruß
Das Orakel

P.S.:
mir ist noch aufgefallen, dass Du das Recordset nicht füllst.

Code:
If RS.RecordCount = 0 Then
    Exit Function
End If

Code:
Hier muss noch Code stehen, der das Recordset mit den gesuchten Daten füllt.

If RS.RecordCount = 0 Then
    Exit Function
End If
 
Zuletzt bearbeitet:
Mhhhm, was meinst du damit, das ich mein Recordset nicht fülle.
habe die hier in meinen code , oder ist das falsch !!
...
RS.Open "SELECT * From ordner ", cn
If RS.RecordCount = 0 Then
Exit Function
End If
...
 
Hi,

da es sich um eine rekursive Prozedur handelt, muss die Suche nach den entsprechenden Datensätzen auch in der Prozedur erfolgen.

Code:
Private Sub BaueTreeView(ByVal nParent As Integer, ByVal oNode As Node)
    Dim mNode                   As Node
    Dim RS                      As ADODB.Recordset
    Dim szSQL                   As String
    
    szSQL = "SELECT * FROM ordner WHERE ordner_parent = " & CStr(nParent)
    Set RS = New ADODB.Recordset

    RS.Open szSQL, cn, adOpenKeyset, adLockOptimistic, adCmdText
    If RS.RecordCount < 0 Then
        Exit Sub
    End If

    While Not RS.EOF
        If oNode Is Nothing Then
            Set mNode = TreeView1.Nodes.Add(, tvwFirst, "A-" & RS!ordner_index, RS!ordner_name)
        Else
            Set mNode = TreeView1.Nodes.Add(oNode.Key, tvwChild, "A-" & RS!ordner_index, RS!ordner_name)
        End If

        Call BaueTreeView(RS!ordner_index, mNode)
        RS.MoveNext
    Wend
    RS.Close
End Sub

So funktioniert es bei mir.

Gruß
Das Orakel
 
Frage: bei mir wird das treeview leider nicht gefüllt !!
Liegt das möglicherweise am meiner mysql Verbindung

..........
cnString = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=192.168.70.225;PORT=3306;" & _
"DATABASE=test;USER=user;PASSWORD=;OPTION=3;"
cn.ConnectionString = cnString
cn.Open
..........

Gruss Lasand & Danke für deine Hilfe
 
Hi again,

ufff, dass kann ich Dir nicht beantworten. mySQL nutze ich nur in Verbindung mit PHP. Es könnte aber auch an den Parametern des RS.Open Befehls liegen (adOpenKeyset, adLockOptimistic). Ne weitere Möglichkeit währe noch mal die CursorLocation Eigenschaft zu prüfen.

Gruß
Das Orakel
 

Neue Beiträge

Zurück