Avatar billede jesperwerge Nybegynder
08. januar 2005 - 23:30 Der er 7 kommentarer og
1 løsning

Slette multiple records med en knap

Hej

jeg forsøger at lave et udtræk fra en database med hvor hver record har sin egen checkbox hvis value er recordens AutoID nr.

Jeg vil så gerne kunne slette det antal records hvor checkboxen er markeret.

Mit forsøg ser således ud:

<html>
<head>
<title>Slette Opslagstavle emner/title</title>
<SCRIPT LANGUAGE="JavaScript">
function deleteMe(inAutoID){
if (confirm('Er du sikker på at du vil slette disse opslag?')){
  location='opslag_delete.asp?Delete='+inAutoID;
}
}
</SCRIPT>
</head>

</head>
<body>
<form name="slet">
<table border="1" width="100%" id="table1" cellspacing="1" bordercolor="#CCCCCC">
    <tr>
        <td>Overskrift</td>
        <td>Tekst</td>
        <td>Slettes</td>
    </tr>
<%
Set oDB = Server.CreateObject("ADODB.connection")
      oDB.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../../db/opslag.mdb")

    SQL = "SELECT * FROM Items "
    set oRS = oDB.Execute(SQL)
    oRS.Movefirst
    do while not oRS.EOF
%>
    <tr>
        <td><%= oRS("Overskrift")%></td>
        <td><%= oRS("Tekst")%></td>
        <td><input type="Checkbox" name="DeleteRecord" value="<%=oRS("AutoID")%>"></td>
    </tr>
<%
  oRS.Movenext
  Loop
  oDB.Close
  set oRS = Nothing
%>
</table>
</form>
<input type="button" name="btnDelete" value="Slet disse opslag" onclick="java script:deleteMe('<%= oRS("AutoID") %>');">
</body>
</html>
Avatar billede softspot Forsker
08. januar 2005 - 23:40 #1
Jeg tror du er nød til at udføre POST på din form i stedet og så løbe igennem alle de felter der kommer med over - det er kun dem der er afkrydset der findes i Request.Form("DeleteRecord") collection, så det burde "bare" være et spørgsmål om at slette dem der er...

Jeg ville ændre formularen så den ser således ud:

<html>
<head>
<title>Slette Opslagstavle emner/title</title>
<SCRIPT LANGUAGE="JavaScript">
function deleteMarked(){
if (confirm('Er du sikker på at du vil slette alle de markerede opslag?')){
  slet.action='opslag_delete.asp;
  slet.submit()
}
}
</SCRIPT>
</head>

</head>
<body>
<form name="slet" id="slet" method="post">
<table border="1" width="100%" id="table1" cellspacing="1" bordercolor="#CCCCCC">
    <tr>
        <td>Overskrift</td>
        <td>Tekst</td>
        <td>Slettes</td>
    </tr>
<%
Set oDB = Server.CreateObject("ADODB.connection")
      oDB.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../../db/opslag.mdb")

    SQL = "SELECT * FROM Items "
    set oRS = oDB.Execute(SQL)
    oRS.Movefirst
    do while not oRS.EOF
%>
    <tr>
        <td><%= oRS("Overskrift")%></td>
        <td><%= oRS("Tekst")%></td>
        <td><input type="Checkbox" name="DeleteRecord" value="<%=oRS("AutoID")%>"></td>
    </tr>
<%
  oRS.Movenext
  Loop
  oDB.Close
  set oRS = Nothing
%>
</table>
</form>
<input type="button" name="btnDelete" value="Slet markerede opslag" onclick="java script:deleteMarked();">
</body>
</html>
Avatar billede jesperwerge Nybegynder
09. januar 2005 - 09:23 #2
-> softspot

jeg har forsøgt det sm du forslår, og kan godt se hvor du vil hen, men for mig virker dte som om der mangler noget i slette scriptet for at den kan finde de markede elementer, jeg ved bare ikke helt hvordan jeg skal bære mig af

har du nogle andre forslag?
Avatar billede softspot Forsker
09. januar 2005 - 10:30 #3
Prøv lige at køre dette script:

<%
if request.form("submit") <> "" then
    set lt = request.form("checks")
    for each ctl in lt
        Response.Write ctl & "&nbsp;"
    next
end if
%>
<html>
<body>
<form method="post" action="<%=request.servervariables("scriptname")%>">
    <input type="checkbox" name="checks" id="checks" value="c1">
    <input type="checkbox" name="checks" id="checks" value="c2">
    <input type="checkbox" name="checks" id="checks" value="c3">
    <input type="checkbox" name="checks" id="checks" value="c4">
    <input type="checkbox" name="checks" id="checks" value="c5">
    <input type="checkbox" name="checks" id="checks" value="c6">
    <input type="checkbox" name="checks" id="checks" value="c7"><br>
    <input type="submit" name="submit" value=" check ">
</form>
</body>
</html>


Det skulle give dig en idé om hvordan du henter værdierne ud af request.form-objektet...
Avatar billede jesperwerge Nybegynder
09. januar 2005 - 17:34 #4
-> softspot

det tog mig lidt tid at finde rundt i hvad jeg egentlig forsøgte men nu virker det, koden kom til at se således ud:
----------------------
<%
Set oDB = Server.CreateObject("ADODB.connection")
      oDB.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../../db/opslag.mdb")
     
if request.form("submit") <> "" then
    set lt = request.form("slet")
    for each ctl in lt
    'Response.Write ctl & "&nbsp;"
    next
    oDB.Execute("DELETE FROM [Items] WHERE AutoID in ("&lt&");")
    oDB.Close
end if
%>
<html>
<head>
<title>Slette Opslagstavle emner/title</title>
</SCRIPT>
</head>

</head>
<body>
<table border="1" width="100%" cellspacing="1" bordercolor="#CCCCCC">
    <tr>
        <td>Overskrift</td>
        <td>Tekst</td>
        <td>Slettes</td>
    </tr>
   

<html>
<body>
<form name="FormSlet" method="post" action="opslag_delete.asp">
<%
Set oDB = Server.CreateObject("ADODB.connection")
      oDB.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../../db/opslag.mdb")

    SQL = "SELECT * FROM Items "
    set oRS = oDB.Execute(SQL)
    oRS.Movefirst
    do while not oRS.EOF
%>
    <tr>
        <td><%= oRS("Overskrift")%></td>
        <td><%= oRS("Tekst")%></td>
        <td><input type="Checkbox" name="slet" id="Checks" value="<%=oRS("AutoID")%>"></td>
    </tr>
<%
  oRS.Movenext
  Loop
  oDB.Close
  set oRS = Nothing
%>
</table>
<input type="submit" name="submit" value=" checks ">
</form>
</body>
</html>
----------------------
tak for hjælpen

smid lige et svar så du kan få nogle point
Avatar billede softspot Forsker
09. januar 2005 - 18:05 #5
Jeg kan se du fandt en variant (godt man også kan lidt SQL ;o)) - det er en fin måde at gøre det på, men så kan du godt fjerne for each... next konstruktion før

oDB.Execute("DELETE FROM [Items] WHERE AutoID in ("&lt&");")

- den er ikke nødvendig længere :)
Avatar billede jesperwerge Nybegynder
09. januar 2005 - 20:56 #6
Hehe - tak for det
Avatar billede jesperwerge Nybegynder
18. januar 2005 - 19:34 #7
hej Softspot - undskyld forsinkelsen
Avatar billede jesperwerge Nybegynder
18. januar 2005 - 19:36 #8
hmm - Softspot, har du fået dine points? jeg synes ikke helt de 100 points jeg har udestående forsvinder. !!
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