Avatar billede mini-me Nybegynder
05. oktober 2008 - 21:05 Der er 16 kommentarer og
1 løsning

Rekursiv funktion til at finde level

Hej,

Jeg har en menu som giver mulighed for uendelige undermenuer, det virker fint.

Nu er mit spørgsmål så, hvordan kan jeg ved hjælp af en enkel funktion finde ud af hvilke niveauer der ligger bag det niveau jeg er på?

Eks.:

id-title-refID

1 Velkommen 0
2 Nyheder 0
3 Andet 0
4 Bomber 2
5 Nye bomber 2
6 Softball 2
7 Softball for juniorer 6
8 Softball for seniorer 6
9 Kontigent 7

eks.: står jeg på siden med recordID 7, så vil jeg gerne kunne kalde en funktion som så kan fortælle jeg er på dette niveau:

nyheder>softball>softball for juniorer>kontigent
Avatar billede mini-me Nybegynder
05. oktober 2008 - 21:28 #1
tror umiddelbart selv jeg har løst det:

function getLevel(pageId)

    call openLocalDB(conn, "mainDatabase.mdb")
    strSQL = "SELECT title, refPage, id from siteSystem where id=" & pageId
    set rs = conn.execute(strSQL)
   
    response.Write(rs("title"))
   
    if rs("refPage") = 0 then
        ' nothing
    else
        call getLevel(rs("refPage"))
    end if
   
end function
Avatar billede mini-me Nybegynder
05. oktober 2008 - 21:42 #2
Men hvordan kan jeg returnere det som en værdi i stedet for at skrive det ud?
Avatar billede mini-me Nybegynder
05. oktober 2008 - 21:42 #3
variabel...
Avatar billede coderdk Praktikant
06. oktober 2008 - 09:20 #4
Lige dén der behøver ikke være rekursiv. Bare loop indtil refID er 0...
Avatar billede mini-me Nybegynder
06. oktober 2008 - 09:46 #5
og fordi jeg er doven :-) 200 point, hvis du smider mig et eksmpel.. :=)
Avatar billede coderdk Praktikant
06. oktober 2008 - 10:29 #6
Helt utestet - Mit VB er rustent ;)

function getLevel(pageId)
    call openLocalDB(conn, "mainDatabase.mdb")
    strSQL = "SELECT title, refPage, id from siteSystem where id=" & pageId
    set rs = conn.execute(strSQL)
    s = ""
    while rs("refPage") <> 0
      response.Write(rs("title"))
      if s <> "" then
        s = s + "&gt;"
      end if
      s = rs("title")
      strSQL = "SELECT title, refPage, id from siteSystem where id=" & rs("refPage")
      set rs = conn.execute(strSQL)
    wend
    getLevel = s
end function
Avatar billede mini-me Nybegynder
06. oktober 2008 - 10:55 #7
Tjaa det virker jo perfekt.

har lige modificeret det en smule..

function getLevel(pageId)
    call openLocalDB(conn, "mainDatabase.mdb")
    strSQL = "SELECT title, refPage, id from siteSystem where id=" & pageId
    set rs = conn.execute(strSQL)
    s = ""
    while rs("refPage") <> 0
    s = rs("title")
     
      strSQL = "SELECT title, refPage, id from siteSystem where id=" & rs("refPage")
      set rs = conn.execute(strSQL)
      s = rs("title") & "\" & s
    wend
    getLevel = s
end function


smid svar for point
Avatar billede coderdk Praktikant
06. oktober 2008 - 11:22 #8
Ok :)
Avatar billede mini-me Nybegynder
06. oktober 2008 - 14:09 #9
Jaaah inden vi kommer for godt igang :) det virker ikke ud i 3. niveau... kun i niveau 1 og 2 ....

function getLevel(pageId)
    call openLocalDB(conn, "mainDatabase.mdb")
    getLevelSQL = "SELECT title, refPage, id from siteSystem where id=" & pageId
    set getLevelRS = conn.execute(getLevelSQL)
   
    if getLevelRs.eof or GetLevelRs.bof then
        ' nothing....
    else
        s = ""
        while getLevelRS("refPage") <> 0
        s = getLevelRS("title")
         
          getLevelRS = "SELECT title, refPage, id from siteSystem where id=" & getLevelRS("refPage")
          set getLevelRS = conn.execute(getLevelRS)
          s = getLevelRS("title") & "/" & s
        wend
        getLevel = s
    end if
end function
Avatar billede mini-me Nybegynder
06. oktober 2008 - 15:04 #10
Det er ikke helt korrekt, den tager bare ikke level 0 med.


function getLevel(pageId)
    call openLocalDB(conn, "mainDatabase.mdb")
    getLevelSQL = "SELECT title, refPage, id from siteSystem where id=" & pageId
    set getLevelRS = conn.execute(getLevelSQL)
        s = ""
        while getLevelRS("refPage") <> 0

        s = getLevelRS("title") & "/" & s
         
          getLevelRS = "SELECT title, refPage, id from siteSystem where id=" & getLevelRS("refPage")
          set getLevelRS = conn.execute(getLevelRS)

       
        wend
        getLevel = s

end function
Avatar billede coderdk Praktikant
06. oktober 2008 - 16:04 #11
Prøv

function getLevel(pageId)
    call openLocalDB(conn, "mainDatabase.mdb")
        s = ""
        hopUd = 0
        while hopUd = 0
          getLevelSQL = "SELECT title, refPage, id from siteSystem where id=" & pageId
          set getLevelRS = conn.execute(getLevelSQL)
          s = getLevelRS("title") & "/" & s
          if pageId = 0 then
              hopUd = 1
          end if
          pageId = rs("refPage")
        wend
        getLevel = s
end function
Avatar billede mini-me Nybegynder
06. oktober 2008 - 16:07 #12
Den melder bare en error error '80020009'
Avatar billede coderdk Praktikant
06. oktober 2008 - 16:20 #13
Prøv

function getLevel(pageId)
        call openLocalDB(conn, "mainDatabase.mdb")
        s = ""
        hopUd = 0
        while hopUd = 0
          getLevelSQL = "SELECT title, refPage, id from siteSystem where id=" & pageId
          set rs = conn.execute(getLevelSQL)
          s = rs("title") & "/" & s
          if pageId = 0 then
              hopUd = 1
          end if
          pageId = rs("refPage")
        wend
        getLevel = s
end function
Avatar billede mini-me Nybegynder
06. oktober 2008 - 16:29 #14
Nææ... error '80020009'
Avatar billede coderdk Praktikant
06. oktober 2008 - 17:52 #15
Hmm, prøv

function getLevel(pageId)
        call openLocalDB(conn, "mainDatabase.mdb")
        s = ""
        hopUd = 0
        while hopUd = 0
          getLevelSQL = "SELECT title, refPage, id from siteSystem where id=" & pageId
          set rs = conn.execute(getLevelSQL)
          if not rs.eof then
              s = rs("title") & "/" & s
              if pageId = 0 then
                  hopUd = 1
              end if
              pageId = rs("refPage")
          else
              hopUd = 1
          end if
        wend
        getLevel = s
end function
Avatar billede coderdk Praktikant
06. oktober 2008 - 19:29 #16
Det virkede? :)
Avatar billede mini-me Nybegynder
06. oktober 2008 - 19:43 #17
nemlig ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester