我們這里介紹如何使用 Recordset 對象進行插入、更新和刪除操作,順便和 SQL 語句對比。
插入記錄
AddNew 方法用於插入一條記錄,首先打開一個記錄集,並且這個記錄具備可寫特性,而后調用 AddNew 方法告訴 ADO 要插入一條記錄,而后分別設置各個字段的值,最后調用 Update 方法將插入的記錄生效。
還是直接看具體代碼和注釋吧(AddNew.asp),如下:
<!--#include file="../include/conn.asp"--> <% Dim oRs, sql sql = "SELECT * FROM [產品]" Set oRs = Server.CreateObject("ADODB.Recordset") oRs.Open sql, oConn, 1, 3 '這個3表示可修改 '調用 AddNew 准備插入記錄 oRs.AddNew() oRs("產品名稱") = "巧克力面包" oRs("供應商ID") = 8 oRS("類別ID") = 3 oRS("單位數量") = "個" oRS("單價") = 5 oRS("庫存量") = 150 oRS("訂購量") = 50 oRS("再訂購量") = 25 oRS("中止") = False oRs.Update oRs.Close Set oRs = Nothing '///////////////////////////////////////////////// 'SQL 版本的插入執行 Dim RA sql = "INSERT INTO 產品 ( 產品名稱, 供應商ID, 類別ID, 單位數量, 單價, 庫存量, 訂購量, 再訂購量, 中止 ) VALUES ('奶油面包', 8, 3, '個', 3, 200, 50, 25, False)" oConn.Execute sql, RA If RA <> 0 Then Response.Write("插入記錄成功") End If oConn.Close Set oConn = Nothing %>
執行后,我們在 Access 中發現已經插入 2 條新記錄了,如下圖:
更新記錄
更新記錄僅僅需要將記錄集的指針移動到相應的位置,而后是更新記錄,最后調用 Update 方法進行更新即可。
還是來看代碼和注釋吧(UpdateRecord.asp),如下:
<!--#include file="../include/conn.asp"--> <% Dim oRs, sql sql = "SELECT * FROM [產品]" Set oRs = Server.CreateObject("ADODB.Recordset") oRs.Open sql, oConn, 1, 3 '這個3表示可修改 oRs.MoveLast '移動到最后一條記錄 oRs("產品名稱") = "我被修改了" oRs.Update oRs.Close Set oRs = Nothing '///////////////////////////////////////////////// 'SQL 版本的更新記錄 Dim RA sql = "UPDATE 產品 SET [產品名稱]='我被修改了' WHERE [產品ID]=(SELECT MIN([產品ID]) FROM 產品)" oConn.Execute sql, RA If RA <> 0 Then Response.Write("更新記錄成功") End If oConn.Close Set oConn = Nothing %>
執行后,我們通過 Access 發現第一條和最后一條記錄已經被修改了,查詢結果如下:
刪除記錄
刪除語句則是將記錄集指針要移動到相應位置后,直接調用 Delete 方法,即可。
具體實現的代碼(DeleteRecord.asp)如下:
<!--#include file="../include/conn.asp"--> <% Dim oRs, sql sql = "SELECT * FROM [產品]" Set oRs = Server.CreateObject("ADODB.Recordset") oRs.Open sql, oConn, 1, 3 '這個3表示可修改 oRs.MoveFirst '定位到第一條記錄 oRs.Delete() oRs.Update oRs.Close Set oRs = Nothing '///////////////////////////////////////////////// 'SQL 版本的更新記錄 Dim RA sql = "DELETE FROM 產品 WHERE [產品ID]=(SELECT MIN([產品ID]) FROM 產品)" oConn.Execute sql, RA If RA <> 0 Then Response.Write("刪除記錄成功") End If oConn.Close Set oConn = Nothing %>
執行后,我們通過 Access 查看執行的效果,結果什么也沒有刪除,原因是其他表“訂單明細”中包含了相關記錄,不能刪除或改變記錄。如果要刪除需要先刪除關系的表中的記錄。我們在“關系”視圖中將產品表和訂單明細表的“編輯關系”對話框中勾選上“級聯刪除相關記錄”選項,這樣就能刪除了。
再次執行 ASP 頁面代碼,Access 中產品表刪除前后的對比結果如下:
Open 方法的常用參數
在上面的代碼中,我們已經看到 Recordset 對象在使用 Open 方法時傳了幾個參數,如下代碼:
oRs.Open sql, oConn, 1, 3
其中 sql 和 oConn 兩個含義我們已經知道了,分別是打開記錄集所使用的 SQL 語句和數據庫連接對象。后面的 1 和 3 是什么意思呢?
我們先看看 Recordset 對象的 Open 方法定義:
Recordset.Open Source, ActiveConnection, CursorType, LockType, Options
游標類型(CursorType)指定了記錄集中游標指針的移動方法,它的可選值在 adovbs.inc 文件中有記錄,該文件你可以在你的 C:\Program Files\Common Files\System\ado 這個位置找到該文件。如下:
<% '---- CursorTypeEnum Values ---- Const adOpenForwardOnly = 0 Const adOpenKeyset = 1 Const adOpenDynamic = 2 Const adOpenStatic = 3 %>
- adOpenForwardOnly 使用僅向前的游標。扯了在記錄中只能向前滾動外,與靜態游標相同。當只需要在 Recordset 中進行一個傳遞時,用它提高性能。
- adOpenKeyset 使用鍵集游標。盡管從您的 Recordset 不能訪問其他用戶刪除的記錄,但除無法查看其他用戶添加的記錄外,它和動態游標相似。其他用戶所做的數據更改依然能見。
- adOpenDynamic 使用動態游標,其他用戶所做的添加、更改和刪除均可見,而且允許 Recordset 中所有移動類型。
- adOpenStatic 使用靜態游標。一組記錄的靜態副本,可用於查找數據或生成報告。其他用戶所做的添加、更改和刪除不可見。
- adOpenUnspecified 不指定游標類型 (-1)。
鎖定類型(LockType)可選參數如下:
<% '---- LockTypeEnum Values ---- Const adLockReadOnly = 1 Const adLockPessimistic = 2 Const adLockOptimistic = 3 Const adLockBatchOptimistic = 4 %>
- adLockReadOnly Recordset對象以只讀方式啟動,無法運行增、刪、改等操作
- adLockPessimistic 當數據源正在更新時,系統會鎖定其他用戶的動作,以保證數據的一致性
- adLockOptimistic 當數據源正在更新時,系統不會鎖定其他用戶的動作,其他用戶可以對數據進行操作。只有在調用 Update 方法時才鎖定記錄。
- adLockBatchOptimistic 當數據源正在更新時,其他用戶必須將 CursorLocation 改為 adUdeClientBatch 才能對數據進行增、刪、改等操作。
當您首次打開一個 Recordset 時,當前記錄指針指向第一個記錄,同時 BOF 和 EOF 屬性都是 False。如果沒有記錄則 BOF 和 EOF 屬性都是 True。




