---
title: "return rs från en inc-fil"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/14348-return-rs-från-en-inc-fil"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "OveRRidE"
published: "2002-02-11T14:24:00.000Z"
updated: "2002-02-11T16:01:00.000Z"
replies: 10
views: 515
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/14348-return-rs-från-en-inc-fil"
---

# return rs från en inc-fil

## #1 — OveRRidE, 2002-02-11T14:24Z

Jag försöker returnera ett recordset, med denna enkla funktion:

```
function returnRS(SQL)
	Dim conn
	Set conn = Server.CreateObject("ADODB.Connection")
	Set rs = Server.CreateObject("ADODB.RecordSet")
	conn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(strDatabasePath) )
	set rs = conn.execute(SQL)
	set returnRS = rs
end function
```

 

som jag anropar med

```
set rs = returnRS(SQLstr)
```

men jag får

```
Item cannot be found in the collection corresponding to the requested name or ordinal.
```

på den första raden där jag skall hämta ur recordset:et på sidan:

```
response.write rs("usrUsername")
```

Vad är fel?

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

## #2 — Addeladde, 2002-02-11T14:37Z

Du har ju inte specificerat vilken tabell och vilka fält du ska hämta.
Eller du kanske inte har tagit med det här.

Har du kollat så att strdatabasepath är rätt?

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

## #3 — OveRRidE, 2002-02-11T14:41Z

> Du har ju inte specificerat vilken tabell och vilka fält du ska hämta.

Jo, men den är inte med: (Här är det :))

```
sqlStr = "SELECT * FROM users WHERE id = " & session("userid") & ""
```

Ligger ju givetvis innan anropet.

> Har du kollat så att strdatabasepath är rätt?

Jupp. Och det körs ju en server.mappath på conn-raden med. 

```
strDatabasePath = "/data/data.mdb"
```

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

## #4 — mattiasjarnhall, 2002-02-11T15:05Z

Vad händer om du byter ut:
set returnRS = rs

till:
returnRS = rs

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

## #5 — LarsG, 2002-02-11T15:23Z

DÅ du har conn som en lokal variabel i din sub så kommer det att objektet att försvinna när du lämnar suben. 

Du kan ju fundera på vad som händer med ditt recordset då.

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

## #6 — OveRRidE, 2002-02-11T15:33Z

> Vad händer om du byter ut...

Inget. :)

LarsG \>\> Men det är en funktion ju.. ingen sub.. :q Skall jag dim:a och instansiera conn och rs utanför funktionen då?

\[redigerat mängder\]

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

## #7 — SPiN, 2002-02-11T15:34Z

Tips: Använd dig av GetRows och returnera en tvådimensionell array. Då gör det inget om du har en lokal databaskoppling.

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

## #8 — OveRRidE, 2002-02-11T15:36Z

SPiN \> Jag antar att det är lättast att söka på det.. ;) Men det låter krångligt med en tvådimensionell array..

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

## #9 — OveRRidE, 2002-02-11T15:39Z

Men om jag använder en array kan jag väl inte loopa igenom "recordsetet" på samma sätt? Det är väl mest bra ifall man vill ha ut en rad och enbart en, typ..? Eller har jag missuppfattat det helt? :q Har faktiskt aldrig använt getRows.. :l

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

## #10 — LarsG, 2002-02-11T15:55Z

Yada, yada. Om det är en sub eller function har ingen betydelse för vilket scope som objekt har.

Jo, jag skulle nog göra skapa connection-objektet utanför sub

```
dim conn
set conn = server.createobject("adodb.connection")
```

och sedan skicka det som parameter till din funktion där du kan kolla om det behöver öppnas eller inte

```
function (conn,sqlstr)
if conn.state = 0 then 'adStateClosed
conn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(strDatabasePath) )
end if
set returnRS = conn.execute(sqlstr)
end function
```

red: Det som händer i din kod är att recordsetet stängs när ditt conn-objekt försvinner.

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

## #11 — SPiN, 2002-02-11T16:01Z

Japp, du har missuppfattat. :e

Det är superenkelt! Eftersom att jag är så dålig på att förklara, visar jag med lite kod istället...

```
Function getRows ( sSQL )
	Dim conn
	set conn = Server.CreateObject ( "ADODB.Connection" )
	conn.Open  ( "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath ( strDatabasePath ) )
	set rs = conn.execute ( sSQL )
	If rs.EOF Then
		rs.Close
		conn.Close
		set rs = Nothing
		set conn = Nothing

		getRows = Null
	Else
		Dim arrRows
		arrRows = rs.GetRows ()

		rs.Close
		conn.Close
		set rs = Nothing
		set conn = Nothing

		getRows = arrRows
	End If
End Function

Dim arrRows
arrRows = getRows ( "SELECT fldName, fldEmail FROM users WHERE id = " & Session ( "userid" ) )

If IsArray ( arrRows ) Then
	Dim i
	For i = lBound ( arrRows, 2 ) To uBound ( arrRows, 2 )
		Response.Write "Namn: " & arrRows ( 0, i ) ' 0:an anger vilket fält som ska hämtas, i från vilken rad
  		Response.Write "<br/>"
  		Response.Write "E-mail: " & arrRows ( 1, i )
	Next
Else
	Response.Write "Inga poster"
End If
```

Det är lite som skiljer, dvs. bör du ange vilka fält som ska hämtas med SQL-frågan, så att du vet i vilken ordning du får dem. Arrayen använder du sedan som en vanlig tvådimensionell array, med fältet i första dimensionen och värdet på fältet i andra dimensionen.

Hoppas det blev lite klarare, annars får någon mer pedagogisk försöka... ;)

Red.} Hade glömt lite felhantering...

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

---

Tråden på webben: https://www.webforum.nu/amne/asp/14348-return-rs-från-en-inc-fil
