webForumDet fria alternativet

uppdatera med recordset i en loop

ASPur ASP

24 svar · 369 visningar · startad av OveRRidE

OveRRidEMedlem sedan feb. 200112 078 inlägg
#1

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.. :)

------------------
I have comed to take what is rightfully mine. Existence in eternity. And all i need is your creditcard number. | Existence

LarsGMedlem sedan dec. 200012 464 inlägg
#2

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.

------------------
essentitia preter non sans multiplicandum

OveRRidEMedlem sedan feb. 200112 078 inlägg
#3
'Ö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 :)

------------------
I have comed to take what is rightfully mine. Existence in eternity. And all i need is your creditcard number. | Existence

LarsGMedlem sedan dec. 200012 464 inlägg
#4

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

------------------
essentitia preter non sans multiplicandum

OveRRidEMedlem sedan feb. 200112 078 inlägg
#5

vad gör ,,128 där?

------------------
I have comed to take what is rightfully mine. Existence in eternity. And all i need is your creditcard number. | Existence

LarsGMedlem sedan dec. 200012 464 inlägg
#6

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.

------------------
essentitia preter non sans multiplicandum

OveRRidEMedlem sedan feb. 200112 078 inlägg
#7

aha.. :)

------------------
I have comed to take what is rightfully mine. Existence in eternity. And all i need is your creditcard number. | Existence

@ndersMedlem sedan juni 200032 969 inlägg
#8

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å. :)

------------------
can i borrow your goat?

OveRRidEMedlem sedan feb. 200112 078 inlägg
#9

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 ;)

------------------
I have comed to take what is rightfully mine. Existence in eternity. And all i need is your creditcard number. | Existence

LarsGMedlem sedan dec. 200012 464 inlägg
#10

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.
)

------------------
essentitia preter non sans multiplicandum

OveRRidEMedlem sedan feb. 200112 078 inlägg
#11

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

------------------
I have comed to take what is rightfully mine. Existence in eternity. And all i need is your creditcard number. | Existence

jorgenMedlem sedan feb. 20012 412 inlägg
#12

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

------------------
*** Var går gränsen mellan långa kortbyxor och korta långbyxor? ***

OveRRidEMedlem sedan feb. 200112 078 inlägg
#13

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"?

------------------
I have comed to take what is rightfully mine. Existence in eternity. And all i need is your creditcard number. | Existence

jorgenMedlem sedan feb. 20012 412 inlägg
#14

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

------------------
*** Var går gränsen mellan långa kortbyxor och korta långbyxor? ***

OveRRidEMedlem sedan feb. 200112 078 inlägg
#15

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

------------------
I have comed to take what is rightfully mine. Existence in eternity. And all i need is your creditcard number. | Existence

OveRRidEMedlem sedan feb. 200112 078 inlägg
#16

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

------------------
I have comed to take what is rightfully mine. Existence in eternity. And all i need is your creditcard number. | Existence

[Redigerat av OveRRidE den 20 aug 2001]

[Redigerat av OveRRidE den 20 aug 2001]

LarsGMedlem sedan dec. 200012 464 inlägg
#17

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.

------------------
essentitia preter non sans multiplicandum

OveRRidEMedlem sedan feb. 200112 078 inlägg
#18

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

------------------
I have comed to take what is rightfully mine. Existence in eternity. And all i need is your creditcard number. | Existence

LarsGMedlem sedan dec. 200012 464 inlägg
#19

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

------------------
essentitia preter non sans multiplicandum

jorgenMedlem sedan feb. 20012 412 inlägg
#20

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

------------------
*** Var går gränsen mellan långa kortbyxor och korta långbyxor? ***

131 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)