Avatar billede simsen Mester
15. marts 2006 - 22:18 Der er 1 løsning

Rekursiv funktion hvor øverste niveau ikke skal udskrives

Hejsa alle

Jeg roder stadig med opfinderens menu struktur. Nu får jeg det ud jeg sådan
set vil - altså eksempelvis:

Service
    Lastbiler
    Biler

Det eneste jeg ikke vil have ud er den øverste top - altså "Service". Jeg
ved at jeg har et felt RefID, når denne er 0 så vil jeg ikke have den
udskrevet men de underliggende skal udskrives.

Jeg har forsøgt mig ved at indsætte

if rs("RefID") <> then
end if

forskellige steder i scriptet. Men gør jeg dette, får jeg slet ikke noget
ud, og det skal den jo, da der jo er Lastbiler og Biler som underliggende
punkter.

Jeg har også forsøgt at lave en ekstra where sætning i sql sætningen:

strSQL = "Select * from tblPages where RefID <> 0 and MenuNavn = '" &
smenunavn & "';"

Denne ville den heller ikke godtage - igen kom der så intet ud.

Hvor i koden skal jeg ændre det, så øverste niveau - altså den med RefID = 0
ikke kommer med men de andre gør?

Koden:
<%
' This script can be used freely as long as all copyright messages are
intact
' Morten Neesgaard, www.opfinderen.dk (c) 2004

'trim(Request("ID"))
smenunavn = trim(Request("menunavn"))

if id <> "19" then

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & ("c:\Inetpub\wwwroot\Randers\data\test.mdb")
Conn.Open DSN

' Rekursiv funktion, der returnerer en liste over ID-numre på valgt mappe
samt de overliggende
Function FindModer(ID)
For i = 1 To Ubound(IDer)
  If CInt(IDer(i)) = CInt(ID) Then
  FindModer = FindModer & "," & ID & "," & FindModer(RefIDer(i))
  End If
Next
End Function

' Rekursiv funktion, der returnerer en if-sætning med ID-numre på valgt
mappe samt de underliggende, der samtidig skal slettes
Function SletMappe(ID)
For i = 1 To Ubound(IDer)
  If CInt(RefIDer(i)) = CInt(ID) Then
  SletMappe = SletMappe & " Or ID = " & IDer(i) & SletMappe(IDer(i))
  End If
Next
End Function

' Rekursiv funktion, der udskriver alle mapper
Function Struktur(ID, Niveau)
Niveau = Niveau + 1
For i = 1 To Ubound(IDer)
  If CInt(RefIDer(i)) = CInt(ID) And InStr(AabneIDer, "," & ID & ",") Then
  For j = 0 To Niveau
    Struktur = Struktur & "&nbsp;&nbsp; "
  Next
  Struktur = Struktur & "&nbsp;<a href='page.asp?id=" & IDer(i) &
"&menunavn=" & smenunavn & "'>" & Navne(i) & "</a><br>" & Struktur(IDer(i),
Niveau)
  End If
Next
Niveau = Niveau - 1
End Function

' ID på den valgte mappe
DetteID = Round(0 & Request.Querystring("id"))

'response.write "sqlstmt="&strSQL&"<br>"
'response.end

strSQL = "Select * from tblPages where MenuNavn = '" & smenunavn & "';"
set rs = Conn.Execute(strSQL)

While Not rs.EOF
IDer = IDer & "," & rs("ID")
RefIDer = RefIDer & "," & rs("RefID")
Navne = Navne & "," & rs("pagename")
If CInt(DetteID) = CInt(rs("ID")) Then DenneMappe = rs("pagename")
  rs.MoveNext
Wend

' Arrays med al data fra tabellen
IDer = Split(IDer, ",")
RefIDer = Split(RefIDer, ",")
Navne = Split(Navne, ",")

' Dan liste over ID-numre på overliggende mapper til valgt mappe, der skal
være markeret som åbne
Arr_Temp_AabneIDer = Split(FindModer(DetteID) & ",0,", ",")
For t = 1 To UBound(Arr_Temp_AabneIDer) - 1 Step 2
AabneIDer = "," & Arr_Temp_AabneIDer(t) & "," & AabneIDer
Next
Arr_AabneIDer = Split(AabneIDer, ",")

Response.Write Struktur(0, 0)

Set rs = Nothing
Set Conn = Nothing

end if
%>
Avatar billede simsen Mester
11. juni 2006 - 09:06 #1
Intet svar - så her giver jeg mig selv pointsene retur :-)
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