מחיקת רשומות

‏ • 3 באוגוסט, 2002



הרבה פעמים, בעיקר במערכות ניהול, אני רוצים להציג לגולש רשימה של כל הרשומות בטבלה מסויימת,
ולתת לו אפשרות למחוק כמה מהן במכה אחת.
זאת ניתן לעשות ע"י יצירת סדרה של תיבות סימון בעלות שם זהה, אך ערך ייחודי לכל אחת מהן.

מבנה הטבלה

לצורך הדוגמא, נשתמש בטבלה בשם myFriends , בעלת השדות הבאים:

  • ID – שדה מסוג מספור אוטומטי
  • Friend_Name – שדה מסוג טקסט המכיל את שם החבר
  • Friend_Age – שדה מסוג מספר המכיל את גילו של החבר
  • Friend_Address – שדה מסוג טקסט המכיל את כתובתו של החבר

הצגת הרשימה

נגדיר את אובייקט החיבור ואת הרקורדסט, ונפתח את החיבור לבסיס הנתונים:


1
2
3
4
5
6  

<%
    Dim conn, rs
    Set conn = Server.CreateObject("ADODB.Connection")
    Set rs = Server.CreateObject("ADODB.Recordset")
    conn.Open connDSN
%>

נשלוף, בעזרת אובייקט חיבור ורקורדסט שהגדרנו קודם, את כל החברים בטבלה:



1
2
3  

<%
    rs.Open "SELECT * FROM myFriends",conn
%>

נפתח טופס ששמו myForm , וכ-action ניתן לו את הדף delete.asp.


1  

<form method="post" action="delete.asp">

בתוך הטופס, נבנה טבלה המכילה את כל פרטי החברים. לצד כל חבר, נציג תיבת סימון, בעלת השם toDel, ובערך, ניתן לה את מספר ה-ID של החבר.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15  

<table>
<%Do While Not rs.EOF%>
<tr>
    <td><%=rs("Friend_Name")%></td>
    <td><%=rs("Friend_Age")%></td>
    <td><%=rs("Friend_Address")%></td>
    <td><input type="checkbox" name="toDel" value="<%=rs("ID")%>"></td>
</tr>
<%    rs.MoveNext
Loop
rs.Close
conn.Close
Set rs=Nothing
Set conn=Nothing%>
</table>

בסופו של דבר, נוסיף כפתור Submit, ונסגור את הטופס.


1
2  

<input type="submit" value="DELETE">
</form>

התוצאה תראה כך (שים לב שזו דוגמא בלבד, והטופס לא פועל) :

משה כהן13השקמה 21
מה נחום45אליהו 12
משה דוד67הנשיא 789
משה לוי22עזה 89
משה שמעון21יפו 61
משה רחמיאלי17ירוחם 99
משה שמוליק34תל אביב 56
משה רחל15חיפה 45
משה קרקוב45ישראל 2000

כדי למחוק רשומות, כל מה שעל הגולש לעשות, הוא לסמן את הרשומות שברצונו למחוק, וללחוץ על הכפתור. לאחר שליחת הטופס, נגיע לדף delete.asp

הדף list.asp בשלמותו:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26  

<%
    Dim conn, rs
    Set conn = Server.CreateObject("ADODB.Connection")
    Set rs = Server.CreateObject("ADODB.Recordset")
    conn.Open connDSN
    rs.Open "SELECT * FROM myFriends",conn
%>
<form method=post action="delete.asp">
<table>
<%Do While Not rs.EOF%>
<tr>
    <td><%=rs("Friend_Name")%></td>
    <td><%=rs("Friend_Age")%></td>
    <td><%=rs("Friend_Address")%></td>
    <td><input type="checkbox" name="toDel" value="<%=rs("ID")%>"></td>
</tr>
<%    rs.MoveNext
Loop
rs.Close
conn.Close
Set rs=Nothing
Set conn=Nothing%>
</table>
<input type="submit" value="DELETE">
</form>


דף המחיקה

כאשר אנו מסמנים יותר מתיבת סימון אחת, ה-Request שלנו מכיל את כל הערכים של התיבות שסומנו (אלו שהן בעלות אותו שם) מופרדים בפסיקים. כלומר, אם סימני את התיבות שהערכים שלהם הם 1,4 ו- 6, אם נכתוב את השורה:


1  

<%=Request.Form("toDel")%>

התוצאה תהיה 1,4,6.

קודם כל, נבדוק אם בכלל סומנה תיבה כלשהי (ניתן לעשות זאת גם בצד לקוח, לפני שהטופס נשלח):


1  

<%If Request.Form("toDel")<>"" Then%>

אם הוא לא ריק, נגדיר את אובייקט החיבור, ונפתח את החיבור לבסיס הנתונים.


1
2
3
4
5  

<%
    Dim conn, sql
    Set conn = Server.CreateObject("ADODB.Connection")
    conn.Open connDSN
%>

ניצור משתנה שיכיל את שאילת, המחיקה שלנו. בשאילתה נשתמש באופרטור IN, המקבל מספר ערכים מופרדים בפסיקים (בדיוק מה שה-Request שלנו מכיל):


1
2
3  

<%        
    sql="DELETE FROM myFriends WHERE ID IN (" & Request.Form("toDel") & ")"
%>

אם נדפיס את השאילתה, היא תראה כך:


1  

DELETE FROM myFriends WHERE ID IN (1,4,6)


מה בעצם אומר: "תמחק את כל הרשומות מהטבלה myFriends, שה-ID שלהן הוא 1,4 או 6.

נפעיל את השאילתה באמצעות אובייקט החיבור (לאחר ביצוע שורה זו, הרשומות כבר נמחקו מבסיס הנתונים).


1  

<%conn.Execute sql%>

לאחר המחיקה, נעביר את הגולש חזרה לדף list.asp


1  

<%Response.Redirect "list.asp"%>

הקובץ delete.asp בשלמותו:


1
2
3
4
5
6
7
8
9
10
11
12
13
14  

<%
    If Request.Form("toDel")<>"" Then
        Dim conn, sql
        Set conn = Server.CreateObject("ADODB.Connection")
        conn.Open connDSN

        sql="DELETE FROM myFriends WHERE ID IN (" & Request.Form("toDel") & ")"
        conn.Execute sql
        conn.Close
        Set conn=Nothing

    End If
    Response.Redirect "list.asp"
%>

בהצלחה!

תגיות: , , ,

תגובות בפייסבוק