Avatar billede webtiger Nybegynder
14. februar 2001 - 21:11 Der er 10 kommentarer og
2 løsninger

Fra liste til checkboxe ved sletning af flere ordrer i Access

Hej

Jeg har lavet en liste, der kan slette een ordrer ad gangen i Access-databasen. Hvordan laver jeg checkboxe i stedet, hvor der kan slettes alt med \"on\" ?

Min første fil ser sådan ud:
***************************************

<!-- #include file=\"adovbs.inc\" -->
<html>
<head>
</head>
<body bgcolor=ffffff>
<p> <%
Set Connect = Server.CreateObject(\"ADODB.Connection\")
Connect.Open \"DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=\" & Server.MapPath (\"kc.mdb\")
SQL = \"SELECT * FROM Ordre\"
Set Resultat = Connect.Execute(SQL)
%> </p>
<form action=\"Slet2.asp\">
  <table align=\"center\" cellpadding=\"5\" cellspacing=\"0\" border=\"1\" bordercolor=\"#333399\">
    <tr>
      <td width=\"43\" valign=\"bottom\">
        <select name=\"liste\">
<%
do until Resultat.EOF
Response.Write \"<option>\"
Response.Write Resultat(\"ID\")
Response.Write \"</option>\"
Resultat.MoveNext

loop
Response.Write \"<select>\"

%></select>
</td>
      <td width=\"85\" valign=\"bottom\">
        <input type=submit value=\"Slet ordre\">
</td></tr></table>

</form>

</body></html>
******************************************
Den sender til Slet2.asp:

<!-- #include file=\"adovbs.inc\" -->
<% 
Set Connect = Server.CreateObject(\"ADODB.Connection\")
Connect.Open \"DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=\" & Server.MapPath (\"Kc.mdb\")
SQL = \"SELECT * FROM Ordre WHERE Ordre.ID=\" & Request(\"liste\")
Set Resultat = Server.CreateObject(\"ADODB.Recordset\")
Resultat.Open SQL, Connect, adOpenStatic, adLockPessimistic

Resultat.delete
%>
<html><body bgcolor=ffffff>
<div align=\"center\">
  <p>&nbsp;</p>
  <p><b><font size=\"3\" color=\"#333399\">Ordren er nu slettet </font></b> </p>
</div>
</body></html>



På forhånd tak

Avatar billede eagleeye Praktikant
14. februar 2001 - 21:40 #1
Formen i Fil1skal rettes til:

<%
Response.Write \"<table border=1>\"
Response.Write \"<tr><td>ID</td><td>Slet</td></tr>
%>
<form method=\"post\" action=\"slet2.asp\" name=\"navnet\">
<%       
Do While Not Resultat.EOF
  Response.Write \"<tr><td>\" & rs(\"ID\") & \"</td>\"
  Response.Write \"<td>\" 
%>
<input type=\"checkbox\" name=SLETDISSE value=<%=rs(\"ID\")%>>
<%       
  Response.Write \"</td></tr>\"
  Resultat.MoveNext
Loop
Response.Write \"</table>\"
%>   
<p><input type=\"submit\" value=\"Slet\" name=\"Action\"></p>
</form>
<%


--------FIL2 Skal se sådan ud


<% Response.Buffer = True %>
<html>
<head>
<title>Slette resultat</title>
</head>
<body>

<!-- #include file=\"adovbs.inc\" -->
<%
nItems = Request.Form(\"SLETDISSE \").Count
if (nItems >= 1) then
\'Henter værdien fra sidste side
strDSN = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\"&Server.MapPath(\"testabb.mdb\")
Set myConn = Server.CreateObject(\"ADODB.Connection\")
Set rs = Server.CreateObject(\"ADODB.RecordSet\")
myConn.Open strDSN

For i = 1 To nItems
  rs.open \"SELECT * FROM Ordre WHERE Ordre.ID=\"&Request.Form(\"SLETDISSE \")(i), myConn,3,3
  rs.delete
  rs.close
  Response.Write \"Order nr.\"& Request.Form(\"SLETDISSE \")(i) & ” er nu slettet.<br>”
Next

\'Rydder op efter os
myConn.Close
else
  Response.Write \"Ikke noget at slette\"
end if
%>
</body>

</html>
Avatar billede eagleeye Praktikant
14. februar 2001 - 21:41 #2
<input type=\"checkbox\" name=SLETDISSE value=<%=rs(\"ID\")%>>

SKAL VÆRE

<input type=\"checkbox\" name=SLETDISSE value=<%=Resultat(\"ID\")%>>
Avatar billede eagleeye Praktikant
14. februar 2001 - 21:42 #3
Eller skal der kun være en checkbox som slettet alle poster og ikke en checkbox pr post som jeg har lavet ovenfor???
Avatar billede sone Nybegynder
14. februar 2001 - 21:56 #4
Jeg ville gøre det lidt smartere:

<input type=\"checkbox\" name=\"SLETDISSE\" value=\"<%=resultat(\"ID\")%>\">

Hvis der afkrydses flere, så adskilles værdier med komma (2,6,9) - og det skal udnyttes:

sletdisse = Request.Form(\"SLETDISSE\")
sletdisse = Replace(sletdisse, \",\", \" OR ordre.ID=\")
SQL = \"DELETE FROM Ordre WHERE Ordre.ID=\" & sletdisse

Altså kun ét kald til databasen.

Avatar billede eagleeye Praktikant
14. februar 2001 - 21:59 #5
Nå det vidste jeg ikke man kunne.. Jo det er nemere.

sone>>Hvor lang må en SQL streng være?
Avatar billede sone Nybegynder
14. februar 2001 - 22:05 #6
Det kommer an på databasen - i Access er det vist 1K
Avatar billede eagleeye Praktikant
14. februar 2001 - 22:12 #7
OK
Avatar billede webtiger Nybegynder
14. februar 2001 - 22:41 #8
sone>>Hvordan skal fil nr 2 så se ud ?
Avatar billede webtiger Nybegynder
14. februar 2001 - 22:44 #9
eagleeye>>

Fil 1 fungerer fint, men ved fil 2 kommer: \"Ikke noget at slette\", selvom jeg har afmærket 3 checkboxe i fil 1.

Min fil 2 ser nu sådan ud:

<html>
<head>
<title>Slette resultat</title>
</head>
<body>

<!-- #include file=\"adovbs.inc\" -->
<%
nItems = Request.Form(\"SLETDISSE \").Count
if (nItems >= 1) then
\'Henter værdien fra sidste side
strDSN = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\"&Server.MapPath(\"kc.mdb\")
Set myConn = Server.CreateObject(\"ADODB.Connection\")
Set rs = Server.CreateObject(\"ADODB.RecordSet\")
myConn.Open strDSN

For i = 1 To nItems
  rs.open \"SELECT * FROM Ordre WHERE Ordre.ID=\" & Request.Form(\"SLETDISSE\")(i), myConn,3,3
  rs.delete
  rs.close
  Response.Write \"Order nr.\" & Request.Form(\"SLETDISSE \")(i) & \" er nu slettet.<br>\"
Next

\'Rydder op efter os
myConn.Close
else
  Response.Write \"Ikke noget at slette\"
end if
%>
</body>

</html>
Avatar billede sone Nybegynder
14. februar 2001 - 22:46 #10
<!-- #include file=\"adovbs.inc\" -->
<% 
Set Connect = Server.CreateObject(\"ADODB.Connection\")
Connect.Open \"DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=\" & Server.MapPath (\"Kc.mdb\")

sletdisse = Request.Form(\"SLETDISSE\")
sletdisse = Replace(sletdisse, \",\", \" OR ordre.ID=\")
SQL = \"DELETE FROM Ordre WHERE Ordre.ID=\" & sletdisse

call Connect.Execute(SQL)
%>
+ HTML
Avatar billede eagleeye Praktikant
14. februar 2001 - 22:46 #11
hmm det ser ud som jeg har lavet et mellemrum i:
nItems = Request.Form(\"SLETDISSE \").Count
Prøv denne:
nItems = Request.Form(\"SLETDISSE\").Count


Også her:
Response.Write \"Order nr.\" & Request.Form(\"SLETDISSE \")(i) & \" er nu slettet.<br>\"
Prøv denne:
Response.Write \"Order nr.\" & Request.Form(\"SLETDISSE\")(i) & \" er nu slettet.<br>\"

Avatar billede webtiger Nybegynder
14. februar 2001 - 22:58 #12
eagleeye>> Tusind tak - nu fungerer det fint

Mvh
webtiger
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