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.
24 svar · 423 visningar · startad av OveRRidE
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..
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.
'Ö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
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
vad gör ,,128 där?
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.
aha..
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å.
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 ?
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.
)
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
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
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"?
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.
mvh Jörgen
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å
just de ja.. kod
Red: Denna kod fungerar inte!
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
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.
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..
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
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