Hej! Kom på lösningen själv. >Sql = "update shItems set antal = '"& nr &"' where id = "& Rs.Fields("id").Value Vad tycker du är bättre då?? Om ditt exempel fungerar (=om category är ett tal) så borde detta fungera: En brist i din kod är möjligheten till "race condition". Tänk dig att två användare kör koden samtidigt. Tack för svaren, får hoppas du har rätt Andreas ang anv 1 & 2 ifall dom använder koden samtidigt.Uppdatera access databas
Jag gör en webshop och allt funkar som det skall utan problemet jag hör av mig till er om.
Jag har fört in antal produkter som finns i lager i en access databas, och när personerna handlat så skall det automatiskt minska i databasen, det är denna uppdatering av databasen jag inte klurar ut.
koden som jag får fram artiklarna ser ut som följer.
<code>
for v= 0 to numRecords
tmp = printColumn( Rs.Fields("title").Value, 28)
Details = Details & printColumn( itemCount(Rs.Fields("id").Value,false), 3) & _
printColumn( Rs.Fields("title").Value, 28) & _
printColumn(Rs.Fields("price").Value, 10) & _
(itemCount(Rs.Fields("id").Value,false) * Rs.Fields("price").Value )
Details = Details & vbcrlf
TotalPrice = TotalPrice + itemCount( Rs.Fields("id").Value, False) * Rs.Fields("price").Value
totalvikt = Totalvikt + itemCount( Rs.Fields("id").Value, False) * Rs.Fields("vikt").Value
'Response.Write itemCount(Rs.Fields("id").Value,false) & Rs.Fields("title").Value & "<br>" '<******Här listas antal och titel.
Rs.MoveNext
next</code>
Där det står "här listas antal och titel" det är antalet som skall uppdateras i kolummen antal i tabellen shitems. Värdet skall minska med antalet som man får fram från itemCount(Rs.Fields("id").Value,false).
Jag får fram antalet om jag kör
<code>Response.Write Rs.Fields("antal").Value - itemCount(Rs.Fields("id").Value,false)</code>
fast uppdateringen får jag inte ihop.
<code>
Sql = "update shItems set antal = '"& Rs.Fields("antal").Value - itemCount(Rs.Fields("id").Value,false)&"' where id = "& itemCount(Rs.Fields("id").Value,false)
</code> funkar inte, någon som har en lösning?
Hoppas ni förstår vad jag menar.
//JockeSv: Uppdatera access databas
<code>
nr=Rs.Fields("antal").Value - itemCount(Rs.Fields("id").Value,false)
'Response.Write nr 'Rs.Fields("antal").Value - itemCount(Rs.Fields("id").Value,false)
Sql = "update shItems set antal = '"& nr &"' where id = "& Rs.Fields("id").Value
conn.execute(sql)
</code>Sv:Uppdatera access databas
Inte för att det har något med det här att göra men jag skulle inte sova gott om natten om jag skrivit ovanstående kod.
1. Antal sparas i databasen som en textsträng
2. Rs.Fields("id").Value konverteras implicit till en sträng
Båda sakerna kommer att ge problem med formattering (tex decimalavgränsare) förr eller senare.Sv: Uppdatera access databas
Till något annat också.
Hur sorterar jag denna kod så namnen i kolummen title hamnar i bokstavsordning?
Rs.Open "SELECT * FROM Items WHERE category = " & Request.QueryString("category")
Har försökt använda ORDER by title asc efter, men får bara en massa felmeddelanden.Sv:Uppdatera access databas
Rs.Open "SELECT * FROM Items WHERE category = " & Request.QueryString("category") & " ORDER BY [title]"
/JohanSv:Uppdatera access databas
Första användarens begäran hinner hämtar beräkna nr.
Första användarens begäran "haltas" eftersom tråden har förbrukat sin cykel.
Andra användaren hinner genomföra hela koden och uppdataera databasen.
Första användarens begäran återupptas och sparas över andra användarens uppdaterade värde.
Det är för detta transaktioner uppfanns.
Ett bättre alternativ för sql frågan är:
Sql = "UPDATE shItems SET antal = antal - " & itemCount(Rs.Fields("id").Value,false) & vbCrLf & _
"WHERE id = " & Rs.Fields("id").Value
conn.execute sql
Då du genomför hämtning och sparning i en operation i databasen.
JAg rekomenderar starkt att du använder parameter frågor.
Sv: Uppdatera access databas