Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Rekursion på trådar...

Postades av 2005-12-28 15:10:45 - Jesper Thörn, i forum asp - allmänt, Tråden har 4 Kommentarer och lästs av 404 personer

Jag skulle vilja ha hjälp med en funktion för att kunna lista trådar i nivåer.

Databasstrukturen är som följer:
t_id | t_relid | t_linktext

Initialt så vill jag att alla "huvuttrådar" (Som saknar relid) skall visas.

Ex.
Bilar
Cyklar
Båtar

Klickar jag ex. på Bilar så skall huvud och -undertrådar till bilar visas

Ex.
Bilar
--Volvo
--Saab
--VW
Cyklar
Båtar

Klickar jag nu på Volvo så skall volvos modeller visas och klickar jag sedan på ex saab så skall volovs modeller döljas och saabs visas osv.
Jag tänker mig inget javascrip-trassel utan att jag skickar med id:t i en querystring på något vis.
Lite roddig föklaring kanske.
Går detta att förstå eller har jag strulat im mig alldeles?
Jag har skapat en rekursiv funktion men den skriver bara ut allt rakt upp å ned.

Sub PrintTree(intParent,intSub)
Dim objRubrik,objNode,sql
  sql = "SELECT t_id, t_relid, t_linktext FROM my_table WHERE t_relid = " & intParent
  Set objRubrik = connection.Execute(sql)

  Do Until objRubrik.EOF
  
    sql = "SELECT t_relid FROM my_table WHERE t_relid = " & objRubrik(0)
    Set objNode = connection.Execute(sql)

	if intSub = 1 then strSub = "-" else strSub = ""

   If NOT objNode.EOF Then
		Response.Write("-" & objRubrik(2) &"<br>")
		PrintTree objNode(0), 1
	Else
      Response.Write("-"& strSub & objRubrik(2) & "<br>")
	End If

    objNode.Close : Set objNode = Nothing
	objRubrik.MoveNext
  Loop

  objRubrik.Close : Set objRubrik = Nothing
End Sub


Svara

Sv: Rekursion på trådar...

Postades av 2005-12-30 14:23:37 - Jesper Thörn

Inga tips alls?


Svara

Sv:Rekursion på trådar...

Postades av 2005-12-31 09:28:41 - Jonas Boman

Jag har bara tre steg i undermenyn men så här jag gjort:

Jag har kolumner som heter menulevel1 och menulevel2
Jasg hämtar de värderna från raden som requestas och lägger dem i
thisml1 (vilken sida i menyroten den nya sidan skall ligga under) och thisml2 (om den skall ligga under en annan undersida under menyrotsidan)


<code>
Set rsRoot = Conn.Execute("SELECT Id, Namn FROM content WHERE menulevel1 IS NULL AND menulevel2 IS NULL ORDER BY sortindex")
If Not rsRoot.EOF Then
'Set rootmenulevel1 = rsRoot("menulevel1")
'Set menulevel2 = rsRoot("menulevel2")
DO Until rsRoot.EOF
Set rootID = rsRoot("Id")
Set rootName = rsRoot("Namn")
response.write "<div id=""menylankar""><p class=""pillank"">"

if rootID = INT(pageID) OR rootID = INT(thisml1) then
'feta menybilden och hämta undermenyer
response.write ""&rootName &"
</p></div>"&VBNewLine
Set rsChild = Conn.Execute("SELECT Id, Namn, menulevel2 FROM content WHERE menulevel1 = "&rootID&" AND menulevel2 IS NULL ORDER BY sortindex")
If Not rsChild.EOF Then
ChildData = rsChild.getrows()
response.write "<div id=""undermenylankar"">"
for i=0 to ubound(ChildData,2)
'Set ChildID = ChildData(0,i)
'Set ChildName = ChildData(1,i)
response.write "<p class=""pilundermenylank"">"

if ChildData(0,i) = INT(pageID) OR ChildData(0,i) = INT(thisml2) then
response.write ""&ChildData(1,i) &""
response.write "
</p>"&vbNewLine

Set rsSubChild = Conn.Execute("SELECT Id, Namn FROM content WHERE menulevel1 = "&rootID&" AND menulevel2 = "&ChildData(0,i)&" ORDER BY sortindex")
If Not rsSubChild.EOF Then
SubChildData = rsSubChild.getrows()
for y=0 to ubound(SubChildData,2)
response.write "<p class=""pilunderundermenylank"">"

if SubChildData(0,y) = INT(pageID) then
response.write ""&SubChildData(1,y) &""
else
response.write SubChildData(1,y)
end if
response.write "
</p>"&vbNewLine
next
End if

rsSubChild.close
else
response.write ChildData(1,i)
response.write "</A></p>"&vbNewLine
end if
next
rsChild.close
response.write "</div>" & vbNewLine & vbNewLine
else
rsChild.close
End if
else
response.write rootName &"</A></p></div>"&VBNewLine
end if
rsRoot.MoveNext
Loop

end if
rsRoot.Close
</code>

Mycket kan vara lite mumbojumbo men nu ser du vad jag gjort iaf.
sen kan man utöka ännu en nivå och lägga till menulevel3 i tabellen också


Svara

Sv: Rekursion på trådar...

Postades av 2005-12-31 16:44:00 - Andreas Hillqvist

Jag tror denna löser det så du vill ha det.

<%
const adOpenForwardOnly = 0
const adLockReadOnly = 1 
const adInteger = 3 
const adParamInput = 1

Function NewCommand(con,CommandText)
const adCmdText = 1
Dim cmd
    Set cmd = CreateObject("ADODB.Command")
    Set cmd.ActiveConnection = con 
    cmd.CommandType = adCmdText 
    cmd.CommandText = CommandText
    cmd.Prepared = true 
    Set NewCommand = cmd
End function    

Sub WriteMenu(rs, fldId, fldText, Expanded, cmd, p)
Dim rsSub
    If rs.EOF Then
    Else
        Set rsSub = CreateObject("ADODB.Recordset")
        Response.Write "<ul>" 
        Do 
            Response.Write "<li>"
            If Expanded.Exists(CStr(fldId.value)) Then
                Response.Write "" & Server.HTMLEncode(fldText.Value) & ""
                p.Value = fldId.value
                rsSub.Open cmd,,adOpenForwardOnly, adLockReadOnly 
                WriteMenu rsSub, rsSub(fldId.Name), rsSub(fldText.Name), Expanded, cmd, p
                rsSub.Close 
            Else
                Response.Write "" & Server.HTMLEncode(fldText.Value) & ""
            End If
            Response.Write "</li>" 
            rs.MoveNext
        Loop Until rs.EOF
        Response.Write "</ul>"
    End If
End Sub


Function Path(cmd, p)
Dim node(2)
Dim nodes
    ' Prepare recordset
    Set rs = CreateObject("ADODB.Recordset")
    
    ' Prepare nodes dictionary
    Set nodes = CreateObject("Scripting.Dictionary")
    
    ' Iterate up from the current id
    rs.Open cmd
    Do Until rs.EOF 
        node(0) = rs("t_id")
        node(1) = rs("t_relid")
        node(2) = rs("t_linktext")
        
        ' Adds node to list with nodes
        nodes.Add CStr(node(0)), node
        
        ' Fetch parent node
        p.Value = rs("t_relid").Value 
        rs.Close 
        rs.Open cmd    
    Loop
    rs.Close 
    
    'Return value
    Set Path = nodes
End Function

Sub WritePath(nodes)
Dim node
Dim temp

    For Each node In nodes.Items 
        temp = "/ " & Server.HTMLEncode(node(2)) & " " & temp
    Next
    response.Write "Path: Fordon "  & temp
End Sub    

Dim p
Dim rs
Dim cmd
Dim con

Dim id
Dim nodes

    ' Id of current menu item
    id = CLng(Request.QueryString("id"))

    ' Opens Connection
    Set con = CreateObject("ADODB.Connection")
    con.Open "Provider=Microsoft.Jet.OLEDB.4.0;" + _
             "Data Source=" + Server.MapPath("menu.mdb") + ";" 

    ' Prepers a comand, which makes querying fast and reliable
    Set cmd = NewCommand(con, "SELECT t_id, t_relid, t_linktext" + vbCrLf + _
                              "FROM my_table" + vbCrLf + _
                              "WHERE t_id = ?" + vbCrLf)    
    Set p = cmd.CreateParameter("id", adInteger, adParamInput, , id) 
    cmd.Parameters.Append p    
    
    Set nodes = Path(cmd, p)
    
    cmd.CommandText = "SELECT t_id, t_linktext" + vbCrLf + _
                      "FROM my_table" + vbCrLf + _
                      "WHERE t_relid = ?" + vbCrLf
    
    Set rs = CreateObject("ADODB.Recordset")
    rs.open "SELECT t_id, t_linktext" + vbCrLf + _
            "FROM my_table" + vbCrLf + _
            "WHERE t_relid Is Null" + vbCrLf, con, adOpenForwardOnly, adLockReadOnly 
    
    WritePath nodes
    WriteMenu rs, rs("t_id"), rs("t_linktext"), nodes, cmd, p
    rs.Close 
        
    con.close
    

 %>


Förvänta dig dock inte att jag förklara den. Då jag anser det är din uppgift att förstå den.


Svara

Sv:Rekursion på trådar...

Postades av 2006-01-02 14:29:17 - Jesper Thörn

Det var ju just det jag behövde. Tack!


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 601
27 953
271 705
4 215
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies