Hej undrar hur man i detta fall i denna nästan helt problematiska koden kollar om recsett är tomt innan den går på och raderar posten?
Så här har jag skrivit men den raderas även fast det finns foster i rs!!
<%
category = Request.Querystring("category")
Dim ConnectString, conn
ConnectString = "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("items.mdb")
Set conn = Server.CreateObject("ADODB.Connection")
Set Rs = Server.CreateObject("ADODB.Recordset")
conn.open ConnectString
SQL = "SELECT ProdNr FROM Items"
rs.Open SQL, Conn
if rs.Eof then
rs.close
set rs=nothing
conn.close
set conn = nothing
Response.Redirect("admin_kat.asp")
rs.MoveNext
else
end if
set rsdelete = conn.Execute("DELETE * FROM Categories WHERE Category = "& Category)
set rsdelete = conn.Execute("DELETE * FROM Items WHERE Category = "& Category)
conn.close
set conn = nothing
Response.Redirect("admin_kat.asp")
%>
Varför skall du kontrollera om tabellen är tom? Det är lika bra att göra delete direkt.
<%
category = Request.Querystring("category")
Dim ConnectString, conn
ConnectString = "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("items.mdb")
Set conn = Server.CreateObject("ADODB.Connection")
conn.open ConnectString
conn.Execute "DELETE * FROM Items WHERE Category = "& Category,rows,128
if rows <> 0 then
conn.Execute "DELETE * FROM Categories WHERE Category = "& Category,rows,128
end if
conn.close
set conn = nothing
Response.Redirect("admin_kat.asp")
%>
Det är mer portabelt mellan olika dbms att skriva
delete from ..
än
delete * from ...
Det är enbart Access 97 som kräver den senare formen.
Jo det är så här att det är en liten shop jag har och varje post är kopplad till en unik bild, alltså kasettbandet man kan beställa har en bild på framsidan. När jag tar bort posterna, så raderas även bilden, men när jag tar bort kategorin: musik, alltså den med kasettbandet i så fösvinner inte bilden utan bara posten med kasettbandet, och bilden ligger kvar, det är inte bra för då måste stackars webmaster gå in och ta bort bilden manuellt...puhh, jobbigt!
<%
category = Request.Querystring("category")
Dim ConnectString, conn
ConnectString = "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("items.mdb")
Set conn = Server.CreateObject("ADODB.Connection")
Set Rs = Server.CreateObject("ADODB.Recordset")
conn.open ConnectString
SQL = ("SELECT ProductNum FROM Items where category =" &category)
rs.Open SQL, Conn
if rs.eof then
set rsdelete = conn.Execute("DELETE * FROM Categories WHERE Category = "& Category)
set rsdelete = conn.Execute("DELETE * FROM Items WHERE Category ="&Category )
response.kakor("fel")= ""
else
response.kakor("fel")= "Du måste tömma kategorin ifrån poster innan du tar bort kategorin"
end if
conn.close
set conn = nothing
Response.Redirect("admin_kat.asp")
%>
Jag vet inte om det är optimalt men det verkar funka, en liten mix av Lars G´s och min gamla, lite <%tokroliga%> kod!
<%
category = Request.Querystring("category")
Dim ConnectString, conn, Rs
ConnectString = "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("items.mdb")
Set conn = Server.CreateObject("ADODB.Connection")
conn.open ConnectString
SQL = ("SELECT ProductNum FROM Items where category =" &category)
set Rs = conn.Execute ( SQL )
if Rs.eof then
conn.Execute("DELETE * FROM Categories WHERE Category = "& Category) ,, 128
conn.Execute("DELETE * FROM Items WHERE Category ="&Category ) ,, 128
response.kakor("fel")= ""
else
response.kakor("fel")= "Du måste tömma kategorin ifrån poster innan du tar bort kategorin"
end if
Rs.close
conn.close
set Rs = Nothing
set conn = nothing
Response.Redirect("admin_kat.asp")
%>