---
title: "Rekursiv funktion för länkar..."
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/129209-rekursiv-funktion-för-länkar"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "Jesper T"
published: "2005-05-31T13:01:22.000Z"
updated: "2005-05-31T14:52:50.000Z"
replies: 6
views: 380
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/129209-rekursiv-funktion-för-länkar"
---

# Rekursiv funktion för länkar...

## #1 — Jesper T, 2005-05-31T13:01Z

Vill skapa en länknavigering, tänkte en liknande rekursiv funktion/sub. Men problemet är att länkarna hamnar i fel ordning. Måste man slänga in allt i en array och vända på ordningen i den eller funkar det att göra det "direkt" i subben?

```
sub linktree(connection,parentid)
Dim rs : Set rs = connection.execute("SELECT relid, linktext FROM links WHERE id = " & parentid)
      Do While Not rs.eof
            Response.Write rs(1) & " &raquo; "
            linktree connection, rs(0)
            rs.movenext
      Loop 
end sub 

linktree connection, 4
```

 

Tabell links

id \| linktext \| relid
\-----------------------
1 Vägarbeten 0
2 Beläggningar 1
3 Asfalt 2
4 Oljegrus 2

Min sub listar ju i ordningen:
Oljegrus » Beläggningar » Vägarbeten » 

Vilket är bakvänt...

Tips?

Permalänk: https://www.webforum.nu/p/129209

## #2 — spango, 2005-05-31T13:04Z

Byt plats på Response.Write och det rekursiva anropet på raden under.

Permalänk: https://www.webforum.nu/p/1622287

## #3 — Jesper T, 2005-05-31T13:12Z

Såklart, spring inte över ån...
Tack! :)

Permalänk: https://www.webforum.nu/p/1622292

## #4 — Guffa, 2005-05-31T13:44Z

Oj, vad många recordset du har glömt att stänga.

Ifall du hämtar alla länkar och lägger in resultatet i en array med GetRows, så att du kan loopa igenom arrayen istället för att ställa en databasfråga för varje länk, så blir koden avsevärt mycket snabbare.

Permalänk: https://www.webforum.nu/p/1622301

## #5 — Jesper T, 2005-05-31T13:52Z

Jag skapar ju inga nya recordset jag återanvänder det.
Det borde väl gå bra om man stänger det efteråt. 
Eller har jag missuppfattat något?

Visst, funkar det med getrows så gärna för mig, men likväl så måste väl posterna hämtas rekursivt.

Hur tänker du dig likande funktion med getrows?

Permalänk: https://www.webforum.nu/p/1622304

## #6 — Guffa, 2005-05-31T14:14Z

> **Jesper T skrev:**
>
> Jag skapar ju inga nya recordset jag återanvänder det.

Nej, det gör du inte. När du anropar Execute så skapas ett nytt recordset.

> **Jesper T skrev:**
>
> Visst, funkar det med getrows så gärna för mig, men likväl så måste väl posterna hämtas rekursivt.

Nej, de behöver inte hämtas rekursivt, de behöver bara visas rekursivt.

> **Jesper T skrev:**
>
> Hur tänker du dig likande funktion med getrows?

Hämta alla länkarna innan du anropar subrutinen. I subrutinen loopar du igenom arrayen och visar de länkar som ska visas på den nivån, istället för att ställa en databasfråga som hämtar länkarna för den nivån.

Permalänk: https://www.webforum.nu/p/1622318

## #7 — Jesper T, 2005-05-31T14:52Z

Visst, du har rätt. 
Gjorde så här i stället:

```
Dim arrLinks
arrLinks = GetRows("SELECT id, relid, linktext FROM links")

Sub navTree(intParent) : Dim X
		For X = 0 to Ubound(arrLinks, 2)
			If arrLinks(0,X) = intParent then
			Call navTree(arrLinks(1,X))
					Response.Write arrLinks(2,X) & " &raquo; "
			End If
		Next 
End Sub

If IsArray(arrLinks) Then Call navTree(4)
```

Permalänk: https://www.webforum.nu/p/1622336

---

Tråden på webben: https://www.webforum.nu/amne/asp/129209-rekursiv-funktion-för-länkar
