---
title: "olika kodutseende"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/40970-olika-kodutseende"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "eriks"
published: "2002-04-06T02:36:40.000Z"
updated: "2002-04-08T01:35:59.000Z"
replies: 17
views: 641
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/40970-olika-kodutseende"
---

# olika kodutseende

## #1 — eriks, 2002-04-06T02:36Z

Hej! Jag har ett problem. Nar jag skapar ett RS, sa skriver jag sa har t.ex.:

	Set Connection = Server.CreateObject("ADODB.Connection")
	Connection.Open "driver={Microsoft Access Driver (\*.mdb)};dbq=C:\\Inetpub\\wwwroot\\asp\\info\\data.mdb"

		SQLStmt = "SELECT \* FROM Settings Where SettingsID = 1"
Set RS = Connection.Execute(SQLStmt)

..vilket sakerligen ar ett foraldrat satt att skriva pa. For nu var det sa att jag hamtade ett script fran Vides hemsida, och han skrive sa har:

Set RS = Server.Createobject("Adodb.Recordset")
strSQL = "Select \* from Chat order by C_Datum desc"
strConString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" &\_
Server.MapPath("/") & "/../wwwroot/asp/info/data.mdb"

Detta borde vara ungefar samma sak (typ att man oppnar databasen och ett RS), men jag far inte ihop det. Pa mitt satt, sa ar Set RS lika med Connection.Execute(SQLStmt) och pa hans satt ar det lika med Server.Createobject("Adodb.Recordset"). Helt olika alltsa. Vad ar skillnaden mellan de tva olika kodsnuttarna?

Tack! /Erik

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

## #2 — Mika3l, 2002-04-06T10:24Z

ADODB.Recordset klarar mer data än Connection.Execute tror jag...

```
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "Driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("data.mdb")
Set rs = Server.CreateObject("ADODB.Recordset")
SQL = "SELECT * FROM bla"
rs.Open SQL, Connection
Response.Write rs("falt")
rs.Close
Set rs = Nothing
Connection.Close
Set Connection = Nothing
```

/Mika3l

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

## #3 — @nders, 2002-04-06T10:36Z

Läs LarsGs inlägg i denna tråd: <http://www.webforum.nu/showthread.php?s=&threadid=12302>

Mvh,

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

## #4 — eriks, 2002-04-06T20:01Z

Tack sa mycket! Nagra oklarheter fortfarande:

1\. Betyder detta att execute ar att foredra om man ska hamta ett RS och anvanda det nagra ganger, typ nar man visar meddelanden i en messageboard?

2\. Vad ar ett "recordset som är frikopplat från databasen"?

3\. Om jag (i mitt exemepel i mitt forsta inlagg) skulle skriva en rad for kod2 motsvarande till "Set RS = Connection.Execute(SQLStmt)" fran kod1, skulle den bli "RS.open strSQL, strConString"? Skulle detta RS isafall vara samma sak och kunna anvandas pa samma satt, eller vad ar skillnaden.

Tack! /Erik

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

## #5 — Jörgen HP, 2002-04-06T20:11Z

Det absolut optimala sättet jag känner till att hämta information från en databas är följande. Då får du ett i princip "fristående rs från databasen", dvs du kan stänga dina 2 öppnade object direkt. Detta innebär också att du kan använda din skapade tvådimentionella array hur många gånger du vill på sidan.

```
sql ="SELECT field1, field2, field3 FROM ogrish"

set rs = connection.execute(sql)

If not rs.eof then

arrMyarray = rs.getrows()

rs.close()
set rs = nothing
connection.close()
set connection = nothing

end if
```

Möjligen är detta snäppet optimalare:

```
sql ="SELECT field1, field2, field3 FROM ogrish"

arrMyArray = connection.Execute(sql).GetRows()

connection.close()
set connection = nothing

if isarray(arrMyArray) then

'#-- do something --

end if
```

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

## #6 — eriks, 2002-04-06T23:10Z

Hmmm, jag vill bara oppna ett vanligt recordset. Maste man blanda in arrayer och getrows och allt det?

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

## #7 — Erik Juhlin, 2002-04-06T23:34Z

GetRows är bra och snabbt. Men en stor nackdel med det är att man anger kolumn med ett index. Inte så bra om man skulle ändra ordning på kolumnerna eller lägga till/ta bort en kolumn i databasen.
En annan nackdel är att det inte blir en lika tydlig kod.

Själv tycker jag att rs.Open varianten är bäst. Om man då anger rs.CursorLocation = adUseClient '(3) och rs.ActiveConnection = Nothing så man får ett frånkopplat recordset. :)

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

## #8 — eriks, 2002-04-07T01:32Z

ghaaaaaa... ju mer ni hjalper mig, ju mindre fattar jag. Var kan man lara sig san't har?

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

## #9 — Jörgen HP, 2002-04-07T10:03Z

> eller lägga till/ta bort i databasen.

Vill du utveckla?

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

## #10 — solbulle, 2002-04-07T10:35Z

> eller lägga till/ta bort i databasen.

 

Vad jag tror han menar, och jag håller med, är att om man lägger till eller tar bort en kolumn i databasen stämer inte ordningen.
Likaså om man tex har en join i en sqlfråga som man sen ändrar på, då kan det vara en nackdel med Getrows.

Iofs kan man väl direkt efter databashämtningen lägga allt i variabler med mer lättfattliga namn, men då tar man väl bort lite av vitsen med det hela, eller?

Hursom helst är det ju alltid bra att vara medveten om de olika vägarna och använda den väg, det sätt, som är lämpligast för tillfället.

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

## #11 — Jörgen HP, 2002-04-07T11:30Z

Ja, nu efter redigeringen blev det mindre kryptiskt. Jag personligen tycker de små nackdelarna vägs över med råge med följande agrument:

1) Ska du loppa ut datan så minskar du anropen till databasen, pga att allt hämtas en gång med getrows(), eller i sämsta fall gruppvis när det gäller mycket data. 

2) Ska du loopa ut ett recset så hämtar du en post i taget, för att sedan gå in och hämta nästa.

3) Du kan stänga ditt connectionobjekt direkt efter hämtning, vilket innebär att du låser databasen kortare tid.

4) Du kan på ett enkelt sätt återanvända din array och loopa ut den flera gånger.

5) Du får ut antalet hämtade poster automatiskt om du är i behov av det.

6) Du behöver inte bry dig om vad de olika cursertyperna betyder och gör, dessutom är stödet för olika kursertyper ganska begränsat i Chili!ASP, vilket körs på många webhotell. Inte så konstigt eftersom fler och fler strävar efter ett bra system, därför väljer man linux. §e

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

## #12 — Erik Juhlin, 2002-04-07T12:14Z

Jag ser bara 6:an som något som är en fördel med GetRows bland de du nämnt.
Ett frånkopplat recordset kan fungera på samma sätt.

Jag ser det som att den enda stora fördelen med GetRows är prestandan. Det går snabbare.

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

## #13 — eriks, 2002-04-07T16:15Z

...nar ar det bra att anvanda execute da?

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

## #14 — Erik Juhlin, 2002-04-07T17:45Z

INSERT, UPDATE, DELETE och liknande. :)

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

## #15 — eriks, 2002-04-07T23:48Z

...sa "metod2" ar bra om man anvander SELECT?

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

## #16 — Erik Juhlin, 2002-04-07T23:52Z

Jag anser i alla fall det. :)

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

## #17 — eriks, 2002-04-08T01:30Z

Erik, jag tankte.... Oftast nar man anvander INSERT, UPDATE, DELETE, sa behover man val inget RS alls. Bara skriva Connection.Execute(SQLStmt). Ska man sammanfatta detta som att sa fort man ska ha ett RS sa anvander man "metod 2"?

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

## #18 — Erik Juhlin, 2002-04-08T01:35Z

Det kan du göra.

Sen så bör man skriva Connection.Execute SQLStmt för att vara helt korrekt.

Att skriva så som du skrev kan jämföras med att skriva rs.Open (SQL), (Connection) istället för rs.Open SQL, Connection :)

Funkar, men inte lika snygg kod. ;)

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

---

Tråden på webben: https://www.webforum.nu/amne/asp/40970-olika-kodutseende
