[Access] 刪除資料


阿瑟 發表



相信在做一個討論板的時候也不免要線上直接刪除資料, 總不可能說每次要刪除就把資料庫抓下來吧?

STEP1:【先複習一下】
由於這篇教學離上次阿得寫關於ASP+Access應用的文章已經有一段時間了, 小弟就先來幫大家複習一下:
<%
Set cons = Server.CreateObject("ADODB.Connection")
DBmPath = Server.MapPath("資料庫名稱.mdb")
cons.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBmPath
set rsm = Server.CreateObject("ADODB.Recordset")
sql="Select *From 資料表名稱 order by date desc"
rsm.Open sql, cons,1, 3


講解:
  • Set cons = Server.CreateObject("ADODB.Connection"), 這行代表的是將cons變數指定為ADODB.Connection物件, 也就是資料庫連線物件
  • DBmPath = Server.MapPath("資料庫名稱.mdb"), 將DBmPath變數指定為該資料庫在主機上的完整路徑
  • cons.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBmPath, 根據DBmPath的資料庫路徑去打開一啟通往該資料庫的連線
  • set rsm = Server.CreateObject("ADODB.Recordset"), 將rsm指定為ADODB.Recordset物件, 也就是資料表的資料集合
  • sql="Select *From 資料表名稱 order by date desc", 這是SQL條件式, 取得的資料集合都必須通過這個條件, Select * From 資料表名稱就是將該資料表(資料表名稱)的所有的欄位(*)都加入資料集合中
  • rsm.Open sql, cons,1, 3, 打開資料表取得資料集合
  • 這是打開SQL資料庫時候的基本連線語法, 下面要開始講如何刪除一筆資料了.

    STEP2:【用Connection去刪除資料】
    其實這個跟上一篇教學中提到的"新增"的用法大同小異:
    Set cons = Server.CreateObject("ADODB.Connection")
    DBmPath = Server.MapPath("資料庫名稱.mdb")
    cons.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBmPath
    sql="Delete * From 資料表名稱 Where 欄位=數值"
    cons.execute(sql)
    cons.close


    使用上面的語法之前您必須先打開一啟資料庫連線(connection), 不過不需要打開資料集合:
  • sql="Delete * From 資料表名稱 Where 欄位=數值",這是一段SQL語法, 內容是從指定的資料表(資料表名稱)刪除(Delete)所有符合Where...後面條件的資料, 包含所有欄位(*)
  • cons.execute(sql),這段就是執行上面的SQL語法, 進行刪除

  • 如果您的資料庫中有一筆以上的資料符合條件, 那這段語法會刪除所有符合條件的資料.

    STEP3:【打開資料表以後刪除】
    如果您要進行的刪除動作比較複雜的話可以使用這種方法:
    Set cons = Server.CreateObject("ADODB.Connection")
    DBmPath = Server.MapPath("資料庫名稱.mdb")
    cons.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBmPath
    set rsm = Server.CreateObject("ADODB.Recordset")
    sql="Select *From 資料表名稱 order by date desc"
    rsm.Open sql, cons,1, 3
    rsm.delete
    rsm.update
    rsm.close
    cons.close


    用這個方法要注意的就是, 他會打開一篇資料表, 取得裡面所有符合條件的資料組成一組資料集合(recordset), 當你一開始執行delete動作的時候, 對象是該資料集合的第一筆資料, 要刪除所有的資料您必須要自己移動到下一筆資料比數(rsm.movenext), 不斷的重複直到所有的資料都刪除, 其實也有簡單一點的方式, 您可以設定一個迴圈, 迴圈的內容就是rsm.movenext和rsm.delete, 一直到所有的資料都刪除(rsm.eof=true)才停止. 語法講解:
  • rsm.delete,這段就是刪除語法, 他一次只會對一列資料進行刪除動作, 不會像是cons物件會一次刪除所有的資料
  • rsm.update,當您刪除完了資料, 實際資料表中還是沒有真正刪除, 您必須更新資料表來儲存刪除後的資料


  • STEP4:【結語】
    這兩種方法其實都有好處, cons.execute是比較簡單, 直接下達指令到資料庫進行刪除, 根本不需要開啟資料表.
    而rsm.delete的方式由於可以在開啟資料庫後進行更多的篩選動作, 比較適合用來進行細部的刪除.

    最後更新日期: 9/6/2002 2:44:16 PM