Avatar billede clausn Nybegynder
01. november 2002 - 21:32 Der er 6 kommentarer og
2 løsninger

Første og sidste ID i en rekrusiv menu

Hej,

Jeg har en Access db med følg. felter:
ID - Autonum.
Overskrift - Tekst
ParentID - Tal

1 - Overskrift
  2 - Overskrift
      3 - Overskrift
          4 - Overskrift

Hvis jeg angive side.asp?id=4 vil jeg gerne have udskrevet hvad der er det første ID (altså 1), men det skulle jo selvfølgelig være muligt at angive 3 (så den stadig retunere 1)

Hilsen
Claus
Avatar billede coltau Juniormester
01. november 2002 - 21:41 #1
Denne while-løkke kan vel gøre det.

StartID = Request.QueryString("ID") ' Valgte ID

' Find valgte ID
Set RS = "select * from tabel where ID=" & CStr(StartID)
' Sålænge der findes en ParentID hentes den i stedet for
do while (CInt(RS("ParentID")) <> 0)
  Set RS = "select * from tabel where ID=" & RS("ParentID")
loop
' Udskriv ID
Response.Write("ID=" & RS("ID"))
Avatar billede clausn Nybegynder
01. november 2002 - 21:44 #2
Fik ikke forklaret mig ordenligt - det skal _så_vidt_muligt laves som et array. Vil ikke lave unødige connections til databasen
Avatar billede coltau Juniormester
01. november 2002 - 21:46 #3
Vil du så indlæse alle records i et array først. ?
Avatar billede clausn Nybegynder
01. november 2002 - 21:49 #4
yeps - har siddet og kigget på http://activedeveloper.dk/aspdigital/2001081401.asp men kan ikke få det til at virke når jeg også vil angive at side.asp?id=xx (xx er et tal)
Avatar billede coltau Juniormester
01. november 2002 - 22:26 #5
Hvis du anvender det nederste kodeeksempel skal du være opmærksom på at der er fejl i det.

Variablen arrResult skal rettes til arrRecords. (2 steder)

Jeg har fået den til at virke.
Avatar billede clausn Nybegynder
01. november 2002 - 22:43 #6
også hvis du i din sql sætning tilføjer "where id = 4"
Har godt set at der er fejl i scriptet - har også fået det til at virke, men ikke når der kommer et id på..
Avatar billede coltau Juniormester
02. november 2002 - 00:10 #7
Så prøv denne:

<%
set Con = Server.CreateObject("ADODB.Connection")
Con.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("test.mdb")

StartID = CInt(Request.QueryString("ID")) ' Valgte ID

set rs = server.createobject("adodb.recordset")
sqlTable = "select * from menuarr order by ID"
rs.open sqlTable, con, 1

if not rs.eof then
  Dim Cnt, LastID, ValgteID
  ReDim strItems(rs.RecordCount) ' Gør plads til menunavne
  arrRecords = rs.getrows()

  buildTop(arrRecords) ' Overfør menunavne til strItems

  for i = 0 to Cnt ' udskriv menu
    if ValgteID = i then
      Response.Write("<b>" & strItems(i) & "</b>"& "<br>")
    else
      Response.Write(strItems(i) & "<br>")
    end if
  next
  Response.Write("Valgte: " & ValgteID & "<br>")
end if
rs.Close
Set rs = Nothing

'\\ først vores funktion der henter alle toppunkter ud
Cnt = 0
sub buildTop(arrRecords)
  strDisplayTop = ""
  for i=0 to ubound(arrRecords,2)
    '\\ hent records hvor parentid = 0
    if arrRecords (2,i) = 0 then
      if arrRecords(0,i) = StartID then
        ValgteID = Cnt ' Valgte ID er en hovedmenu
      end if
      LastID = Cnt
      strItems(Cnt) = arrRecords(0,i) & ", " & arrRecords(1,i)
      Cnt = Cnt + 1
      buildSub arrRecords, arrRecords(0,i), 0
    end if
  next
end sub

'\\ vores funktion til at bygge subs
sub buildSub(arrRecords,intParentid,intIndent)
  for j=0 to ubound(arrRecords,2)
    '\\ her looper vi igennem vores array for at finde de records
    '\\ der er sub til vores parent record
    if arrRecords(2,j) = intParentid then
      if arrRecords(0,j) = StartID then
        ValgteID = LastID ' Her er valgte hoved ID til submenuen
      end if
      '\\ her opbygger vi vores "indrykning"
      strIndent = ""
      for x=0 to intIndent
        strIndent = strIndent & "&nbsp;"
      next
      '\\ og her opbygges vores streng med subs, samt henter subs til subs ... osv
      strItems(Cnt) = strIndent & arrRecords(0,j) & ", " & arrRecords(1,j)
      Cnt = Cnt + 1
      buildSub arrRecords, arrRecords(0,j), intIndent+1
    end if
  next
end sub

%>
Avatar billede clausn Nybegynder
16. december 2002 - 14:48 #8
Løsning blev skrottet, og aldrig realiseret...
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