---
title: "Varför fungerar inte detta mot SQL-databas?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/9341-varför-fungerar-inte-detta-mot-sql-databas"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "brw"
published: "2001-05-07T12:39:00.000Z"
updated: "2001-05-07T18:18:00.000Z"
replies: 9
views: 304
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/9341-varför-fungerar-inte-detta-mot-sql-databas"
---

# Varför fungerar inte detta mot SQL-databas?

## #1 — brw, 2001-05-07T12:39Z

Vid en vanlig listning av en databas brukar man använda en loop som skall uppfylla vilkoren EOF eller BOF.

Och skulle kunna se ut på följande sätt: 

Do while not RS.EOF
Response.Write(RS("FältNamn"))
RS.MoveNext
Loop

Denna metod är bra så länge man inte skall söka genom en databas med många fält då den vid varje runda frågar objektet RS om den har uppfyllt vilkoret EOF eller BOF.
Istället skulle man kunna jämföra två tal variabler vilket går mycket snabbare.

Detta kan skrivas på följande sätt:

RS.MoveLast
RS_Slut = RS.RecordCount
RS.MoveFirst
For i = 1 to RS_Slut
Response.Write(RS("FältNamn"))
RS.MoveNext
Next

Nu bör man kunna få en mätbar hastighets ökning på 20% - 40% vid sökning i en databas.

Men detta verkar inte gå nå bra blir typ nå:
The rowset does not support fetching backwards

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

## #2 — Vide, 2001-05-07T12:58Z

Skulle tro att du itne öppnar din databas med ett Recordsetobjekt... och därav får du inte tillgång till de olika metoderna (som recordcount)...

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

## #3 — brw, 2001-05-07T13:02Z

men det verkar vara på raden som RS.Movelast det blir fel på

Hur ska jag få det att funka då?

Kan det stämma att det kan bli 20 - 40 % snabbare?

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

## #4 — Vide, 2001-05-07T13:06Z

Istället för att öppna databasen med ett Connectionobjekt (som du gör nu) så använder du ett Recordset: <http://www.devguru.com/Technologies/ado/quickref/recordset_open.html> 

Om det blir 20-40% snabbare har jag ingen aning om, men det vore helt klart intressant att veta... :)

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

## #5 — LarsG, 2001-05-07T13:19Z

Jag har svårt att tro att skillnaden skulle bli så stor, men du får gärna mäta. Snabbast sättet är nog att använda metoden getrows.

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

## #6 — PatrikB, 2001-05-07T13:38Z

Jepp, den klart snabbaste varianten är .GetRows

**exempel:**

```
<%
Set objConn = Server.CreateObject("ADODB.Connection")
	objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
		"Data Source=" & Server.MapPath("/db-dir/db-file.mdb")
		
	strSQL = "SELECT ForumID, ForumName, ForumDescription " & _
		"FROM Forum " & _
		"ORDER BY ForumName ASC"
		
	Set objRS = objConn.Execute(strSQL)
		If Not objRS.EOF Then
			arrForum = objRS.GetRows
		End If
		objRS.Close
	Set objRS = Nothing
	objConn.Close
Set objConn = Nothing

'## -- loop through the array and present the data to user --
For I = 0 To UBound(arrForum,2)
	For N = 0 To Ubound(arrForum,1)
		Response.Write arrForum(N,I) & " : "
	Next
	Response.Write "<BR>"
Next
%>
```

cya,
PatrikB

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

## #7 — saw, 2001-05-07T15:06Z

Jag jagar själv hastighet, och jag fann att ovanstående snabbade upp min applikation avsevärt, men jag är intresserad av att få veta mera om det sista förslaget.
"
\## -- loop through the array and present the data to user --
For I = 0 To UBound(arrForum,2)
For N = 0 To Ubound(arrForum,1)
Response.Write arrForum(N,I) & " : "
Next
Response.Write "\<BR\>"
Next
"
Kan någon förklara lite närmare
arrForum,2 (i detta fallet) betyder det att det är kolumb 2? Behöver man i såfall köra igenom alla kolumberna?
Om jag har fyra kolumber....
Hur bör man då skriva ut det?

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

## #8 — @nders, 2001-05-07T15:14Z

arrForum,2 (i detta fallet)

... betyder inte kolumn 2, utan dimension 2.

loopen görs alltså åt båda håll, x och y, för att kunna nyttja arrayens hela innehåll.

mvh,

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

## #9 — saw, 2001-05-07T17:50Z

OK det fungerar snappt som den, men hur styr man det?
I ngot fall så skall det vara en länk. i ett annat fall visa en billd osv.
Någonstans där man kan läsa om det?

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

## #10 — PatrikB, 2001-05-07T18:18Z

inte vad jag vet. har inte hittat något att läsa om just denna typ av array.

Men varför inte testa? du har ju all info som du har i recordsetet samlad i Arrayen. Hur gör du när du kollar i recordsetet om det ska vara en bild eller en länk?

Kan säga så här:

Placeringen på - ForumID, ForumName, ForumDescription ligger på "samma ställe" i Arrayen. Så istället för att skriva den inre loopen av arrayen går detta lika bra:

```
For I = 0 To UBound(arrForum,2)
	intForumID = arrForum(0,I)
	strForumName = arrForum(1,I)
	strForumDescription = arrForum(2,I)

	Response.Write "ForumID: " & intForumID & _
		"ForumName: " & strForumName & _
		"ForumDescription: " & strForumDescription & _
		"<BR>"

Next
```

Sedan är det bara och kolla vad variablerna har för innehåll och sedan visa vad som visas skall.

cya,
PatrikB

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

---

Tråden på webben: https://www.webforum.nu/amne/asp/9341-varför-fungerar-inte-detta-mot-sql-databas
