I från en listbox, så fångar jag upp en sångtitel, som sen jag vill, att i en treeView skall expandera Album och dess innehåll(sångtitlarna). Passar på att ge dig lite optimeringstips:<br> Tack för att du tog dig tid.TextView visar inte rätt...(LÖST)
Så här försöker jag:
[kod]
SQL = "SELECT t_Album.CD_Id,t_Album.Album As Albumet, t_SongTitlar.songtitel, t_Kategori.Kategori " & _
" FROM t_Kategori INNER JOIN (t_Album INNER JOIN t_SongTitlar " & _
" ON t_Album.CD_ID = t_SongTitlar.Album) " & _
" ON t_Kategori.Kat_ID = t_SongTitlar.Kategori " & _
" Where t_SongTitlar.songtitel = '" & List1.Text & "'" & _
" ORDER BY t_Album.Album "
Set Rst = Con.Execute(SQL)
SQL1 = "SELECT t_Album.Album, t_SongTitlar.songtitel As Song, t_Kategori.Kategori " & _
" FROM t_Kategori INNER JOIN (t_Album INNER JOIN t_SongTitlar ON t_Album.CD_ID = t_SongTitlar.Album) ON t_Kategori.Kat_ID = t_SongTitlar.Kategori " & _
" Where t_Album.Album = '" & Rst("Albumet") & "' ORDER BY t_Album.Album"
Set Rst1 = Con.Execute(SQL1)
Dim nodX As Node
Set nodX = TreeView1.Nodes.Add(, , , Rst("Albumet"))
nodX.Expanded = True
nodX.ExpandedImage = 1
Do Until Rst1.EOF
Set nodX = TreeView1.Nodes.Add(1, tvwChild, , Rst1("Song"))
nodX.ExpandedImage = 2
nodX.Expanded = True
Rst1.MoveNext
Loop
[/kod]
Vad som blir fel är, att om jag i listboxen väljer en låt, så kommer uppgifterna fram rätt och riktigt. Men om jag tar en ny titel, så rensas inte den gammla titlen, utan den lägs bara på...
Vad gör jag för fel???Sv: TextView visar inte rätt...
* Öppna inte mer recordsets än nödvändigt<br>
* Lagra en referens till nodes collectionen<br>
* Ha bara det som är nödvändigt i frågan. Tog bort referens till t_Kategori<br>
* Använd id istället för text när du filtrerar (List1.ItemData(List1.ListIndex))<br>
* Det är bra att lägga till Key's för noderna<br>
* Använd fältvariabler i loopar<br>
* Concratenera fält som kan vara null med tomsträng för att slippa fel<br>
<code>
Dim strSQL as String
Dim Con As ADODB.Connecion
Dim rsTemp As ADODB.Recordset
Dim fldSong As ADODB.Field
Dim fldSongId As ADODB.Field
Dim nodX As Node
Dim Nodes As Nodes
Set Nodes = TreeView1.Nodes
Nodes.Clear
Set rsTemp = New ADODB.Recordset
strSQL = "SELECT t_Album.Album_Id, t_Album.Album As Albumet " & _
" FROM t_Album INNER JOIN t_SongTitlar " & _
" ON t_Album.CD_ID = t_SongTitlar.Album" & _
" WHERE t_SongTitlar.songtitel = '" & List1.Text & "'"
rsTemp.Open strSQL, Con
If rsTemp.EOF Then
Set nodX = Nodes.Add(, , , "Not found!")
Else
Set nodX = Nodes.Add(, ,"A" & rsTemp("Album_Id"), "" & rsTemp("Albumet"))
nodX.ExpandedImage = 1
nodX.Expanded = True
strSQL = "SELECT t_SongTitlar.Song_ID, t_SongTitlar.songtitel As Song " & _
" FROM t_Album INNER JOIN t_SongTitlar ON t_Album.CD_ID = t_SongTitlar.Album " & _
" WHERE t_Album.Album = '" & rsTemp("Albumet") & "' ORDER BY t_Album.Album"
rsTemp.Close
rsTemp.Open strSQL, Con
Set fldSong = rsTemp("Song_ID")
Set fldSongId = rsTemp("Song")
Do Until rsTemp.EOF
Set nodX = Nodes.Add(1, tvwChild,"S" & fldSongId, "" & fldSong)
nodX.ExpandedImage = 2
nodX.Expanded = True
rsTemp.MoveNext
Loop
End If
</code>Sv: TextView visar inte rätt...
Det ser helt underbart ut. Jag fick göra några smärre ändringar, men det kände du inte till...
Jag måste fråga dig, jag skulle vilja kunna fånga upp klickningar, på albumett och likadant på titlarna.
Är det möjligt??
Ha en bra dag(natt)