---
title: "uppdatera med recordset i en loop"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/11213-uppdatera-med-recordset-i-en-loop"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "OveRRidE"
published: "2001-08-17T14:32:00.000Z"
updated: "2001-08-21T07:48:00.000Z"
replies: 24
views: 423
page: 1
pages: 2
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/11213-uppdatera-med-recordset-i-en-loop"
---

# uppdatera med recordset i en loop

_Sida 1 av 2._

## #1 — OveRRidE, 2001-08-17T14:32Z

Om jag vill loopa igenom ett recordset och uppdatera varje rad med ny information, hur gör jag det?

det verkar inte fungera med recordset-objektet, jue.. :)

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

## #2 — LarsG, 2001-08-17T14:46Z

Det tror jag inte på. Beror på hur du har gjort, vilken fråga du har ställt, hur du har öppnat recordsetet, vilka rättigheter du har.

Behöver lite mer information om vad som inte fungerar, tack.

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

## #3 — OveRRidE, 2001-08-17T14:49Z

```
'Öppna connection
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("data/priser.mdb"))

Set RecSet = Connect.Execute("SELECT * FROM priser")

do until recset.eof
  RecSet("summa") = recset("summa") * 1,5
recset.movenext
loop
```

typ :)

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

## #4 — LarsG, 2001-08-17T14:53Z

Om du använder executemetoden så blir ditt recordset readonly.
Du måste använda open och ange lämplig cursortyp 3 eller något och sedan anropa recset.update

```

Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("data/priser.mdb"))
Connect.Execute "update priser set summa = 1.5*summa",,128
```

tycker jag är enklare

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

## #5 — OveRRidE, 2001-08-17T14:56Z

vad gör ,,128 där?

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

## #6 — LarsG, 2001-08-17T15:00Z

Jag får nog sluta och skriva sådär eftersom alla bara frågar vad det betyder.

Det betyder att man inte skapar något recordset alls, annars så skapas ett tomt och stängt recordset.

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

## #7 — OveRRidE, 2001-08-17T15:01Z

aha.. :)

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

## #8 — @nders, 2001-08-17T16:14Z

> Jag får nog sluta och skriva sådär eftersom alla bara frågar vad det betyder.

nej, snälla, gör inte det. slutligen kanske jag också lär mig att skriva så. :)

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

## #9 — OveRRidE, 2001-08-20T07:09Z

Ok ok ok. 

Jag har en massa kod, men jag förstår inte hur jag skall använda den.. 

```
'Set Connect = Server.CreateObject("ADODB.Connection")
'Connect.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("data/priser.mdb"))
'Connect.Execute "update priser set summa = 1.5*summa",,128
```

visst.. vackert :)

> Du måste använda open och ange lämplig cursortyp 3 eller något och sedan anropa recset.update

uh ? :q ;)

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

## #10 — LarsG, 2001-08-20T07:18Z

Hur menar du? Du behöver inte mer än den kod jag skrev. Man kan ju lägga till lite stängning och så.

```
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("data/priser.mdb"))
Connect.Execute "update priser set summa = 1.5*summa",,128
connect.close
set connect = nothing
```

(

```
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("data/priser.mdb"))
Set RecSet = server.createobject("adodb.recordset")
recset.open "select * from priser",connect,3,3

do until recset.eof
RecSet("summa") = recset("summa") * 1,5
recset.update
recset.movenext
loop
```

något sådant, men det är inte bra att göra på det sättet.
)

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

## #11 — OveRRidE, 2001-08-20T07:28Z

Tyvärr har ju då problemet sen två dagar sedan tillbaks ändrats så att jag får göra en speciallösning som verkar fungera bättre med din andra lösning..

jag skall nämligen inte lägga 1,25 på **varje**, utan pålägget skall vara parallellt med en slags lista vi har.. (t.ex 1,17, 1,20, 1,25, 1,30 osv)

kolla koden här så förstår du. Har du förslag på ändringar?

```
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("data/priser.mdb"))
Set strRec = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT pris FROM priswebsverige"
strRec.Open strSQL, Conn, adOpenStatic, adLockOptimistic

do until strRec.EOF

	If strRec("pris") <= 50 Then
			addOn = 2.50
	ElseIf strRec("pris") >= 51 AND strRec("pris") <= 100 Then
			addOn = 1.80
	ElseIf strRec("pris") >= 101 AND strRec("pris") <= 200 Then
			addOn = 1.60
	ElseIf strRec("pris") >= 201 AND strRec("pris") <= 500 Then
			addOn = 1.25
	ElseIf strRec("pris") >= 501 AND strRec("pris") <= 2000 Then
			addOn = 1.20
	ElseIf strRec("pris") >= 2001 AND strRec("pris") <= 10000 Then
			addOn = 1.17
	ElseIf strRec("pris") >= 10001 AND strRec("pris") <= 20000 Then
			addOn = 1.15
	ElseIf strRec("pris") >= 20001 AND strRec("pris") <= 2000 Then
			addOn = 1.10
	End If
	
	strRec("pris") = round(strRec("pris")*addOn,0)
	response.write strRec("pris") & "<br>"
	strRec.Update
	
strRec.movenext
loop
```

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

## #12 — jorgen, 2001-08-20T07:43Z

Hej!

Eftersom du jämför **strRec** med olika fall hela tiden borde det vara optimalare med en Select Case.

```

Select strRec

Case <= 50 
        AdOn = "2.50"
Case >= 51 AND strRec("pris") <= 100 
        AdOn = "1.80"
... osv
End Select
```

mvh Jörgen

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

## #13 — OveRRidE, 2001-08-20T07:48Z

Vad är det egentligen för skillnad (prestandamässigt) på en select case och en if-sats? Är det att select fungerar mer som en "funktion"?

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

## #14 — jorgen, 2001-08-20T07:59Z

Prestanda mässigt vet jag inte riktigt hur stor skillnad det är, mer än att det blir mindre och lättbegripligare kod. Plus att det korrekta sättet ett göra det på rent programmeringsmässigt är med en Select Case har jag fått lära mig här på wF. :e

mvh Jörgen

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

## #15 — OveRRidE, 2001-08-20T08:26Z

Hrmm..

..jag byggde en case-sats men jag får

```
Microsoft VBScript compilation error '800a03ea' 
Syntax error 
/render_pallagg.asp, line 29 
Case <= 50
-----^
```

Tydligen funkar inte Case med alternativa jämförelser såsom mer än eller mindre än.

Men tack för hjälpen ändå :e

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

## #16 — OveRRidE, 2001-08-20T08:27Z

just de ja.. kod :)

**Red: Denna kod fungerar inte!** :e :) ;)

```
Select Case strRec("pris")
		Case <= 50
			addOn = 2.50
		Case >= 51 AND strRec <= 100
			addOn = 1.80
		Case >= 101 AND strRec("pris") <= 200
			addOn = 1.60
		Case >= 201 AND strRec("pris") <= 500
			addOn = 1.25
		Case >= 501 AND strRec("pris") <= 2000
			addOn = 1.20
		Case >= 2001 AND strRec("pris") <= 10000
			addOn = 1.17
		Case >= 10001 AND strRec("pris") <= 20000
			addOn = 1.15
		Case >= 20001
			addOn = 1.10
	End Select
```

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

## #17 — LarsG, 2001-08-20T08:37Z

> Tydligen funkar inte Case med alternativa jämförelser såsom mer än eller mindre än.

Precis. Så du får nog använda if i detta fall.

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

## #18 — OveRRidE, 2001-08-20T09:59Z

Hej igen. 

Jag får problem efter 9095 poster..

```
Microsoft JET Database Engine error '80040e21' 

File sharing lock count exceeded. Increase MaxLocksPerFile registry entry. 

/render_pallagg.asp, line 53
```

nån som vet varför? nån sa att jag skulle byta recordset-metod.. 

:q

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

## #19 — LarsG, 2001-08-20T11:45Z

Tja, vet inget om det där med låstyp.

Det kanske är bättre att du gör flera update istället

```
update priser set summa = 2.5*summa where pris <= 50

update priser set summa = 2.5*summa where pris between 51 and 99

'osv
```

Det går i och för sig att baka in allt i en update om man nu vill det

```

update priser set summa = 
iif(pris < 50,2.5*summa,
iif(pris <100,1.8*summa,
iif(pris <200,1.7*summa,
iif(pris <500,1.5*summa,1.1*summa))))
'osv
```

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

## #20 — jorgen, 2001-08-20T11:46Z

Hej!

Så är det kanske. Annars kan du vara lite ful och ange intervaller istället:

Select Case strRec("pris")
Case 0 - 50
addOn = 2.50
...
End Select

Vet ej om detta funkar på alla dina jämförelser, men det kanske går.

mvh Jörgen

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

---

Tråden på webben: https://www.webforum.nu/amne/asp/11213-uppdatera-med-recordset-i-en-loop  
Nästa sida: https://www.webforum.nu/amne/asp/11213-uppdatera-med-recordset-i-en-loop/page2.md
