webForumDet fria alternativet

delete och uppdatera

8 svar · 290 visningar · startad av Dino

DinoMedlem sedan sep. 20011 914 inlägg
#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

LarsGMedlem 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
DinoMedlem sedan sep. 20011 914 inlägg
#3

Tack. :)

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

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

LarsGMedlem 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
DinoMedlem sedan sep. 20011 914 inlägg
#8

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

DinoMedlem sedan sep. 20011 914 inlägg
#9

Funkade galant.

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