---
title: "rs.open metoder..."
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/13063-rs-open-metoder"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "Han-Solo"
published: "2001-12-06T22:34:00.000Z"
updated: "2001-12-07T20:13:00.000Z"
replies: 15
views: 302
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/13063-rs-open-metoder"
---

# rs.open metoder...

## #1 — Han-Solo, 2001-12-06T22:34Z

Varför fungerar inte 

```
objRS.open sql, connection, AdOpenForwardOnly, AdCmdText, AdLockReadOnly
```

för mig?

Var ska jag leta fel?

det felmeddelande jag får är:
Feltyp:
ADODB.Recordset (0x800A0BB9)
Parametrarna är felaktiga, ligger utanför tillåtet intervall eller skapar en inbördes konflikt.
/arbeten/getrows.asp, line 6

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

## #2 — SilvioF, 2001-12-06T22:41Z

Hade det inte varit lättare att bara göra så här?

```
Set objRS = connection.Execute(sql)
```

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

## #3 — LarsG, 2001-12-06T22:43Z

Du har parametrarna i fel ordning

```
objRS.open sql, connection, AdOpenForwardOnly,AdLockReadOnly, AdCmdText
```

om du använder de värdena så kan du lika gärna göra

```
set objRS = connection.execute(sql)
```

och ta bort

```
 set objRS = server.createobject("adodb.recordset")
```

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

## #4 — Han-Solo, 2001-12-06T23:11Z

Har använt mig av connection.execute tidigare... men nu försöker jag skriva prestanda mässigt bra kod.

Använder man connection.execute så har man under en kort tid två kopior av sitt RS i minnet... inte bra

```
set connection = Server.CreateObject("ADODB.connection")
set objRS = Server.CreateObject("ADODB.recordset")
connection.open ("odbc")
sql = "SELECT * FROM tblArticklar ORDER by id"
objRS.open sql, connection, AdOpenForwardOnly

arrayMedData = objRS.GetRows()

objRS.Close()
set objRS = nothing
connection.close
set connection = nothing
```

Som ni ser så kan jag här stänga min databaskoppling på en gång och dessutom har jag all data i en array som jag nu i lugn och ro kan använda mig av utan att behöva ha dåligt samvete för någon öppen databaskoppling...

...mitt problem är dock fortfarande som jag skriver i det första inlägget!!!  (... ordningen ändrade inget!)

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

## #5 — LarsG, 2001-12-06T23:19Z

Du kan använda getrows och stänga ditt  recordset oavsett om du använder

```
set rs = connection.execute
```

eller

```
set objRS = server.createobject("adodb.recordset")
objRS.open sql, connection, AdOpenForwardOnly,AdLockReadOnly, AdCmdText
```

om du använder connection.execute så slipper du dessutom ett anrop. Det finns ingen anledning att använda open.

Om du fortfarande får fel så är det beroende på att du inte definierar konstanterna AdCmdText etc.

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

## #6 — Han-Solo, 2001-12-07T08:51Z

"...inte definierar konstanterna AdCmdText ..." :?

Nä just det... hur gör man det?!

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

## #7 — @nders, 2001-12-07T09:02Z

Det vanligast sättet är att inkludera adovbs.inc på din sida. Jag skulle dock rekommendera att du öppnar den filen och lyfter ut deklarationen av de konstanter du använder till din asp-sida, så blir det ganska bra.

Eller bara kontrollera vilka värden konstanterna motsvarar, och använd dem direkt istället. Titta alltså efter lite grann i adovbs.inc.

Mvh,

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

## #8 — Han-Solo, 2001-12-07T09:26Z

adovbs.inc... givetvis... tack @nders

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

## #9 — LarsG, 2001-12-07T09:36Z

Om du vill skriva effektiv kod är det inte bra att inkludera adovbs.inc utan då är det bättre att själv definera de konstanter man använder.

> Använder man connection.execute så har man under en kort tid två kopior av sitt RS i minnet

Hur då?

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

## #10 — Han-Solo, 2001-12-07T09:40Z

@nders skrev:

> ...du öppnar den filen och lyfter ut deklarationen av de konstanter du använder till din asp-sida...

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

## #11 — LarsG, 2001-12-07T09:52Z

Jo, jag ser att han skrev det. 

Jag är mer nyfiken på det här med två kopior av rs. Har du läst det någonstans och i så fall var?

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

## #12 — Han-Solo, 2001-12-07T11:34Z

DatorMagazin nummer 7 år 2001 tror jag. Det var på sidan 128 eller nått...

En artikel om asp-optimering. (MYCKET bra!!!)

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

## #13 — jorgen, 2001-12-07T16:47Z

Tidigare diskussion angående denna artikel:
 <http://cgi.webforum.nu/wf/Forum11/HTML/004779.html>  

För att återkomma till LarsG:s fråga tar jag mig tiden att citera eftersom det är en givande diskussion.

> "Ett datalager är konstruerat för att hantera stora mänder data, relationer och så vidare. Därför bör all datahantering ske i datalagret. Något annat värt att tänka på, och detta gäller all programmering: Generellt kan sägas att allt som görs i bakgrunden är dåligt. En explicit algoritm som en programmerare själv har utformat är i nio fall av tio snabbare än när saker och ting sköts i bakgrunden.
>
> Ett exempel är att endast skapa upp ett recordset-objekt för databasåtkomst. Det går naturligtvis att göra eftersom ADO kommer att skapa ett connection-objekt i bakgrunden, men prestanda är långt ifrån optimala. Låt mig för enkelhetens skull visa det absolut optimala sättet att skapa en koppling och ett recordset till en databas. Jag ska sedan redogöra för varför just detta är det optimala sättet.
>
>
>
> ```
> set objconn = Server.CreateObject("ADOdb.Connection")
> set objRS = Server.CreateObject("ADOdb.Recordset")
> objConn.Open(strConn)
> objRS.Open(strSQL, strConn, AdOpenForwardOnly, AdLockReadOnly, AdCmdText)
> ```
>
>
>
> \[...\]lägg märke till att vi skickar den öppna databaskopplingen som argument till Openmetoden av Recordset-objektet. Fördelen med detta är att vi aldrig kommer att ha två kopior av recordsetet i minnet, vilket blir fallet om man använder sig av execute-metoden av connection-objektet. Eftersom executemetoden alltid reutrnerarett recordset och vi kopierar över det till recordset-objektet\[...\]

(Lindberg, Magnus, Datormagazin, 7-2001)

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

## #14 — LarsG, 2001-12-07T17:27Z

Jag skulle gärna se en prestandajämförelse. 
I allt annat jag har läst om ADO så har jag inte sett detta. Tvärtom så har man alltid menat att open är onödigt.

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

## #15 — jorgen, 2001-12-07T17:39Z

Då vet du vad du ska göra ikväll LarsG :e

Vi ser fram emot att se reultatet :)

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

## #16 — PatrikB, 2001-12-07T20:13Z

Det behöver nog LarsG inte göra .... har för mig att vi redan dragit diskussionen om ADO vs. CONN recordset med tidtagning med hjälp av Timer() i och för sig .... som sagt, bara att söka på forumet :o

.... och, har "för" mig att conn va det snabbaste alternativet .... fast .... om någon kan köra ett stress test med ett "ritktigt" verktyg för det och visa tider så vore det bra
cya,
PatrikB

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

---

Tråden på webben: https://www.webforum.nu/amne/asp/13063-rs-open-metoder
