Avatar billede bms Nybegynder
27. april 2001 - 16:36 Der er 28 kommentarer og
1 løsning

Slette x antal poster

Hej -

jeg har lavet en lille form der viser hvor mange links jeg har i min database. Så har jeg lavet et tekst felt hvor man kan indtaste hvor mange links man vil slette.

Nu kommer det så - hvordan sletter man fx de 50 ældste links i sin database - de 50 links med laveste ID-nummer på en gang?

Er der en nem måde at gøre det på?
Avatar billede jimmidreng Nybegynder
27. april 2001 - 16:38 #1
delete top 50 * from Table order by id desc
Avatar billede jimmidreng Nybegynder
27. april 2001 - 16:39 #2
Ups, sådan her skal det være:
delete top 50 * from Table order by id
Hvis du sætter desc på, sletter den de nyeste!
Avatar billede bms Nybegynder
27. april 2001 - 16:42 #3
Skal den stå i Sql\'n?
Avatar billede jimmidreng Nybegynder
27. april 2001 - 16:45 #4
Det er en sql query ja.
Du skal eksekvere den via din connection, som:
conn.execute(\"delete top 50 * from Table order by id\")
Avatar billede burningice Nybegynder
27. april 2001 - 16:48 #5
kan man det... det er da en syntaks fejl

jeg vil gøre det på den her måde

antal = request.form(\"antal\")
id = conn.execute(\"SELECT top 1 * from links order by id DESC\")(\"id\")

do until antal = 0

conn.execute(\"delete * from links where (id = id)\")

id = id + 1
antal = antal -1

loop
Avatar billede bms Nybegynder
27. april 2001 - 16:49 #6
Øhh... roder sgu rundt i det nu - kunne jeg få dig til at taste et eksempel sammen?
Avatar billede jimmidreng Nybegynder
27. april 2001 - 16:55 #7
Du har ret, den nægter at lave en top på delete.
Avatar billede bms Nybegynder
27. april 2001 - 17:02 #8
Hmm... det spiller ikke helt - kan I gennemskue hvor fejlen er (\"Antal\" har jeg kaldt \"Linkcount\"):

<%
Linkcount = request.form(\"Linkcount\")

Set RS = server.createobject (\"ADODB.recordset\")
SQL = \"SELECT * FROM Links\"
RS.open SQL, ConnString, adOpenStatic, adLockOptimistic

id = RS.execute(\"SELECT top 1 * from Links order by id DESC\")(\"id\")
do until Linkcount = 0
RS.execute(\"delete * from links where (id = id)\")
id = id + 1
Linkcount = Linkcount -1
loop

RS.close
RS = null

%>
Avatar billede burningice Nybegynder
27. april 2001 - 17:03 #9
okay.. lad os se...

side1.htm

-------------------
<form method=\"POST\" action=\"slet.asp\" name=\"slet\">
  <p>Slet antal link</p>
  <p><input type=\"text\" name=\"antal\" size=\"20\"></p>
  <p><input type=\"submit\" value=\"Submit\" name=\"B1\"><input type=\"reset\" value=\"Reset\" name=\"B2\"></p>
</form>

slet.asp

------------------
response.buffer = true

session.LCID = 1030

Set Conn = Server.CreateObject(\"ADODB.Connection\")
Conn.Open \"DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=\" & Server.MapPath (\"/db.mdb\")

set id = conn.execute(\"SELECT top 1 * from links order by id DESC\")(\"id\")
set antal = request.form(\"antal\")

do until antal = 0
conn.execute(\"delete * from links where (id = id)\")
id = id + 1
antal = antal -1
loop

set id = nothing
conn.close
set conn = nothing
Avatar billede burningice Nybegynder
27. april 2001 - 17:05 #10
hm... lad os prøve med
set rs = conn.execute(\"SELECT top 1 * from links order by id DESC\")
id = rs(\"id\")
Avatar billede burningice Nybegynder
27. april 2001 - 17:05 #11
så skal set id = nothing være set rs = nothing
Avatar billede burningice Nybegynder
27. april 2001 - 17:07 #12
btw, du behøver ikke at lave et recordset for at slette :)
Avatar billede bms Nybegynder
27. april 2001 - 17:11 #13
Har prøvet med din, men den sletter ikke:

<%
antal = request.form(\"Linkcount\")

Set Conn = Server.CreateObject(\"ADODB.Connection\")
Conn.Open ConnString

set id = conn.execute(\"SELECT top 1 * from links order by id DESC\")(\"id\")

do until antal = 0
conn.execute(\"delete * from links where (id = id)\")
id = id + 1
antal = antal -1
loop

set id = nothing
conn.close
set conn = nothing

%>
Avatar billede burningice Nybegynder
27. april 2001 - 17:19 #14
prøv lige at ændre
set id = conn.execute(\"SELECT top 1 * from links order by id DESC\")(\"id\")
til
set rs = conn.execute(\"SELECT top 1 * from links order by id DESC\")
id = rs(\"id\")

og
set id = nothing
til
set rs = nothing
Avatar billede bms Nybegynder
27. april 2001 - 17:21 #15
Det er det samme - der bliver ikke slettet!
Avatar billede burningice Nybegynder
27. april 2001 - 17:27 #16
allright... så må vi jo lave en fejlsøgning

slet.asp

antal = request.form(\"Linkcount\")

response.write \"VI skal slette \"& antal &\" links<br>\"

do until antal = 0
response.write  antal &\"<br>\"
response.write  id &\"<br>\"
response.write \"conn.execute(\'delete * from links where (id = \"& id &\")<br>\"
id = id +1
antal = antal -1
loop




Avatar billede bms Nybegynder
27. april 2001 - 17:28 #17
Der er et eller andet helt galt - har slettet alt i links! Thank god for backups! Hmm... Tror jeg holder for i dag inden det hele går i smadder!
Avatar billede perla Nybegynder
27. april 2001 - 17:28 #18
Her er et eksempel der virker

Delete from tabel where id in (Select top 50 id from tabel)

Så skifter du bare tallet til en variabel

-Per
Avatar billede burningice Nybegynder
27. april 2001 - 17:29 #19
lidt mere detaljeret :)

antal = request.form(\"Linkcount\")

response.write \"VI skal slette \"& antal &\" links<br>\"

do until antal = 0
response.write  \"antal tilbage: \"& antal &\"<br>\"
response.write  \"link id: \"& id &\"<br>\"
response.write \"conn.execute(\'delete * from links where (id = \"& id &\")<br>\"
id = id +1
antal = antal -1
loop
Avatar billede perla Nybegynder
27. april 2001 - 17:30 #20
Glemte lige

Delete from tabel where id in (Select top 50 id from tabel order by id)

Hvis de ikke er lagt ind i en autoserie

-Per

Avatar billede burningice Nybegynder
27. april 2001 - 17:31 #21
hmmm... man tester da aldrig på sin originale database...

jaja, jeg prøvede... men jeg er altså ikke ligefrem ekspert til asp... endnu :D

men min funktion burde da virke, eller hvad siger du perla ??
Avatar billede bms Nybegynder
27. april 2001 - 17:34 #22
perla >> Er det igen en del af sql\'n? Jeg ville blive superglad hvis du gad at flette det ind i resten af koden ovenfor?

Avatar billede perla Nybegynder
27. april 2001 - 17:46 #23
Set Conn = Server.CreateObject(\"ADODB.Connection\")
Conn.Open \"Driver={Microsoft Access Driver (*.mdb)};DBQ=\" & Server.MapPath(\"/db.mdb\")

Antal = request.form(\"antal\")
strSQL = \"Delete from tabel where id in (Select top \" & Antal & \" id from tabel order by id\"
set RS = conn.execute( strSQL )

-Per
Avatar billede perla Nybegynder
27. april 2001 - 17:47 #24
Damn sætternisse

strSQL = \"Delete from tabel where id in (Select top \" & Antal & \" id from tabel order by id)\"

-Per


Avatar billede bms Nybegynder
28. april 2001 - 15:31 #25
Perla >> Den er ikke helt tilfreds :

[Microsoft][ODBC Microsoft Access Driver] Syntax error. in query expression \'id in (Select top id from Links order by id)\'.

/test/database_delete.asp, line 16
Avatar billede bms Nybegynder
28. april 2001 - 15:33 #26
Samlet kode:

<%
Antal = request.form(\"Linkcount\")

Set Conn = Server.CreateObject(\"ADODB.Connection\")
Conn.Open ConnString

strSQL = \"Delete from Links where id in (Select top \" & Antal & \" id from Links order by id)\"
set RS = Conn.execute( strSQL )


set rs = nothing
conn.close
set conn = nothing


%>
Avatar billede perla Nybegynder
28. april 2001 - 15:35 #27
Det er fordi du ikke har fåett indsat hvor mange der skal slettes.

mellem \"top\" og id, har jeg indsat variablen Antal, men du får ikke sat den ind i Antal.

Prøv at sætte Antal = \"10\" i linien inden så vil det virke.

-Per

-Per
Avatar billede bms Nybegynder
28. april 2001 - 15:42 #28
Ha - nej det var mig der havde lavet en dum fejl i min form på siden der kaldte scriptet!

Det virker nu! Thanx!

Avatar billede perla Nybegynder
28. april 2001 - 15:49 #29
Selv tak, glad for kunne hjælpe :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester