webForumDet fria alternativet
Logga in / Bli medlem

delete och uppdatera

Databaser & SQL

8 svar · 290 visningar · startad av Dino

Medlem sedan sep. 20011 914 inlägg
Trådstart#1

Om det ser ut så här i databasen:

no(tal)
1
2
3
4
5
6
7

Kan jag då genom en sql fråga ta bort tex nummer 3 och sen få 4 att bli 3, 5 att bli 4 osv

Medlem sedan dec. 200012 464 inlägg
#2

Nej, det kräver två frågor.

delete from t where no = 3
update t set no = no - 1 where no > 3
Medlem sedan sep. 20011 914 inlägg
#3

Tack. :)

Medlem sedan sep. 20011 914 inlägg
#4

Fortsättning...
Om vi säger att request.form("deleteRow") innehåller 1,4,5,8 så skall koden nedan ta bort rad ett och sen uppdatera raderna efter och sen göra samma med rad 4,5,8. Det funkar om raderna är efter varandra tex 4,5 men när det är mellanrum mellan radtalen tex, 4,7 så tar den bara bort den första raden. Den loopar igenom alla för jag kunde skriva ut alla "bla" med response.write och den när jag skriver ut sqlsatserna så verkar allt oxå stämma.

for each bla in request.form("deleteRow")
   SQL10 = "DELETE FROM order_line WHERE line_no = ("& bla &")"
   set rs10 = objConn10.Execute(SQL10)
   SQL10 = "UPDATE order_line SET line_no = line_no - 1 WHERE line_no > (("& bla &") - 1)"
   set rs10 = objConn10.Execute(SQL10)
next

SQL-satserna

18
DELETE FROM order_line WHERE line_no = (18)
UPDATE order_line SET line_no = line_no - 1 WHERE line_no > ((18) - 1)
25
DELETE FROM order_line WHERE line_no = (25)
UPDATE order_line SET line_no = line_no - 1 WHERE line_no > ((25) - 1)
28
DELETE FROM order_line WHERE line_no = (28)
UPDATE order_line SET line_no = line_no - 1 WHERE line_no > ((28) - 1)
Medlem sedan dec. 200012 464 inlägg
#5

Det där är något helt annat ju.

q = "delete from order_line where line_no in (" & request.form("deleteRow") & ")"
objConn10.execute q,,128
rows = split(request.form("deleteRow"),",")
for i = ubound(rows)  to 0 step -1
    Q = "UPDATE order_line SET line_no = line_no - " & i + 1 & _
    " WHERE line_no > "& rows(i)
    objConn10.Execute Q,,128
next

Det här förutsätter att värdena i deleteRow är sorterade i stigande ordning.

Medlem sedan sep. 20011 914 inlägg
#6

Borttagningen funkar utmärkt. Tack. Men om jag hade 6 rader 1,2,3,4,5,6 så tar jag bort 1,3,5 men den uppdaterar inte raderna så att det blir rad 1,2,3.
Har du någon lösning på det så skulle det vara perfekt. Men nu skall jag hem så jag får fortsätta på Måndag. Tack för hjälpen i alla fall. :)

Medlem sedan dec. 200012 464 inlägg
#7
q = "delete from order_line where line_no in (" & request.form("deleteRow") & ")"
objConn10.execute q,,128
rows = split(request.form("deleteRow"),",")
for i = ubound(rows)  to 0 step -1
    Q = "UPDATE order_line SET line_no = line_no - 1 " & _
    " WHERE line_no > "& rows(i)
    objConn10.Execute Q,,128
next
Medlem sedan sep. 20011 914 inlägg
#8

Tack, skall testa den det första jag gör på Måndag. :)

Medlem sedan sep. 20011 914 inlägg
#9

Funkade galant.

255 ms totalt · 4 externa anrop · v20260731065814-full.c32e866c
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)