我们这里介绍如何使用 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 中产品表删除前后的对比结果如下:
在上面的代码中,我们已经看到 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 %>
锁定类型( LockType )可选参数如下:
<% '---- LockTypeEnum Values ---- Const adLockReadOnly = 1 Const adLockPessimistic = 2 Const adLockOptimistic = 3 Const adLockBatchOptimistic = 4 %>
当您首次打开一个 Recordset 时,当前记录指针指向第一个记录,同时 BOF 和 EOF 属性都是 False 。如果没有记录则 BOF 和 EOF 属性都是 True 。
ADOConn.RAR