[VB] Treeview.. Ik word gek!

Pagina: 1
Acties:

  • kaandorp
  • Registratie: November 1999
  • Laatst online: 03-09 22:36
Ik wil een treeview maken van categorieen met als child-elements de items.

Daarvoor heb ik de volgende code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Private Sub cmdFillTree_Click()
Dim AlbumNode As Node
Dim SqlSub
Dim intIndex As Integer

'Filling the treeview with info from the DB
Set cnDbTree = New ADODB.Connection
cnDbTree.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=photobase;Data Source=fatboy"
cnDbTree.CursorLocation = adUseClient
cnDbTree.Open

Set rsDbTree = New ADODB.Recordset
Set rsDbTreeItem = New ADODB.Recordset

sql = "SELECT shortdesc, album_id FROM albums"
rsDbTree.Open sql, cnDbTree, adOpenDynamic, adLockPessimistic, adAsyncFetch

Do Until rsDbTree.EOF
    
    Set mNode = tvwAlbums.Nodes.Add(, , rsDbTree!shortdesc, Trim(rsDbTree!shortdesc))
    
    SqlSub = "SELECT filename FROM images where album_id='" & rsDbTree!album_id & "'"
    rsDbTreeItem.Open SqlSub, cnDbTree, adOpenDynamic, adLockPessimistic, adAsyncFetch
    Debug.Print rsDbTree!shortdesc
      
    Do Until rsDbTreeItem.EOF
      Set mNode = tvwAlbums.Nodes.Add(rsDbTree!shortdesc, 4, rsDbTreeItem!FileName, rsDbTreeItem!FileName)
      rsDbTreeItem.MoveNext
    Loop
    
    rsDbTreeItem.Close
    rsDbTree.MoveNext
Loop

rsDbTree.Close
Set rsDbTree = Nothing
cnDbTree.Close
Set cnDbTree = Nothing
Set rsDbTreeItem = Nothing

End Sub

Maar hij vult alleen de eerste categorie en vervolgens krijg ik de error:
Runtime Error '35610'
Invalid Object

En die verwijst naar de regel:
code:
1
      Set mNode = tvwAlbums.Nodes.Add(rsDbTree!shortdesc, 4, rsDbTreeItem!FileName, rsDbTreeItem!FileName)

Ik snap er geen reet van. Zo doen ze het in het boek ook. Dus.... En de MSDN is er ook vrij duidelijk over..

  • kaandorp
  • Registratie: November 1999
  • Laatst online: 03-09 22:36
Heb trouwens dit hieronder net geprobeerd en dat werkt wel prima. En volgens mij is dat precies hetzelfde alleen minder uitgebreid.
code:
1
2
3
4
5
6
7
8
For x = 1 To 10
y = "Nummer " & x
    tvw1.Nodes.Add , , y, y
    For a = 1 To 10
    b = "Subitem " & a
    tvw1.Nodes.Add y, tvwChild, , b
    Next a
Next x

  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

Het heeft misschien te maken met de waarde in rsDbTree!shortdesc. Je doet namelijk dit:
code:
1
Set blaat = list.Nodes.Add(, , rsDbTree!shortdesc, Trim(rsDbTree!shortdesc))

Dat wekt bij mij de suggestie dat shortdesc dus spaties ervoor/erna heeft, en dat je dat niet wilt hebben in de lijst. Logisch. Misschien zou je dit moeten proberen...
code:
1
2
3
4
5
Set blaat = list.Nodes.Add(, , Trim(rsDbTree!shortdesc), Trim(rsDbTree!shortdesc))

...

Set blaat = list.Nodes.Add(Trim(rsDbTree!shortdesc), 4, ...)

Ik denk dat het te maken heeft met een spatie erachter of ervoor. Maar goed, dan slaat die foutmelding weer nergens op. Try it anyway ;).

edit:

Ik herinner me een post van een flinke tijd geleden, waarin er een probleem was na het uitvoeren van een SQL query. Dit werd toen opgelost door na de Open een MoveFirst te geven.

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


Verwijderd

Je krijgt redundant keys voor de items. Plak de category key voor de item key. Je mag in je complete tree geen 2 nodes hebben met dezelfde key.

Verder is het gebruikelijk dat je een treeview vult middels recursie. Dus je geeft de parentnode key mee aan een functie en die add alle childs aan die parentkey, en alle childs met childs vul je dan weer door diezelfde functie aan te roepen met als key de childkey :)