«
ASP入门基础教程-Recordset 对象

时间:2008-5-31    作者:Deri    分类: 分享


   <p>  一、Recordset 对象简述</p><p>  Recordset 对象表示的是来自基本表或命令执行结果的记录全集。在任何情况下,该对象所指的当前记录均为集合内的单条记录。使用 Recordset 对象可以操作来自提供程序的数据,通过该对象几乎可以对所有数据进行操作。所有 Recordset 对象均使用记录(行)和字段(列)进行构造。Recordset 对象实际上是依附于 Connection 对象和 Command 对象之上的。通过建立及开启一个 Connection 对象,可以与我们关心的数据库建立连接;通过使用 Command 对象,则可以告诉数据库我们想要做什么:是插入一条记录,还是查找符合条件的记录;通过使用 Recordset 对象,则可以方便自如地操作 Command 对象返回的结果。</p><p>   二、创建 Recordset 对象</p><p>  要使用 Recordset 对象处理结果,首先必须创建 Recordset 对象实例。其格式如下:</p><code>Set RS=Server.CreateObject("adodb.recordset")</code><p>   三、打开记录集</p><code>RS.Open Source,ActiveConnection,CursorType,LockType,Options</code><p>  所有的参数都是可选项。Source 为 Command 对象变量名、SQL 语句、表名、存储过程调用或持久 Rcordset 文件名。</p><p>  ActiveConnection 为有效的 Connection 对象变量名或包含 ConnectionString 字符串。</p><p>  LockType 指定打开 Recordset 时应使用的锁定类型。</p><p>  Options 指定如何计算 Source 参数或从以前保存 Recordset 的文件中恢复 Recordset。</p><p>     四、Recordset 对象的常用属性</p>Recordset 对象的常用属性<表> <table><tr><td>属 性 </td><td colspan="4">描   述 / 注 解 </td></tr><tr><td>ActiveConnection</td><td colspan="4">指定与数据提供者的连接信息,用来指定当前的 Recordset 对象属于哪个 Connection 对象。 </td></tr><tr><td>Source</td><td colspan="4">指定 Recordset 对象的数据源,可以是一个 Command 对象名、SQL 语句、数据库表或存储过程 。 </td></tr><tr><td rowspan="2">CoursorType</td><td colspan="4">指定 Recordset 对象所使用的光标类型。 </td></tr><tr><td colspan="4">共有 4 种光标类型: <p>  0 一 前滚光标,光标只能向前移动,执行效率高。是 Cursor 的默认值;</p><p>  1 一 键盘光标,光标可向前或向后移动,Recordset 记录集同步反映自它创建后其他用户所作的修改和删除,但却不能同步反映自它创建后其他用户新增加的记录;</p><p>  2 一 动态光标,光标可向前或向后滚动,任何时候 Recordset 记录集都同步反映其他用户的任何操作;</p><p>  3 一 静态光标,光标可向前或向后移动,自创建后无法同步反映其他用户所做的任何操作,它的功能简单但消耗资源少。</p></td></tr><tr><td rowspan="2">LockType</td><td colspan="4">表示编辑时记录的锁定类型。它决定了当不止一个用户试图同时改变一个记录时,Recordset 如何处理数据记录。</td></tr><tr><td colspan="4">0 一 只读锁定,记录只读,不能更新 Recordset ,为 LockType 的默认值; <p>  1 一 悲观锁定,编辑记录开始立刻锁定,直到提交给数据提供者;</p><p>  2 一 乐观锁定,一次锁定一条记录,只有调用 Update 方法提交数据时才锁定记录;</p><p>  3 一 乐观的批量更新,允许同时更新多条记录。</p></td></tr><tr><td>Filter</td><td colspan="4">用来设定一个过滤条件,以便对 Recordset 记录进行过滤。 </td></tr><tr><td>CacheSize</td><td colspan="4">表示一个 Recordset 对象在高速缓存中的记录数。</td></tr><tr><td>Maxrecords</td><td colspan="4">执行一个 SQL 查询时,返回 Recordset 对象的最大记录数。</td></tr><tr><td>Bof</td><td colspan="4">判断记录指针是否到了第一条记录之前。</td></tr><tr><td>Eof</td><td colspan="4">判断记录指针是否到了最后一条记录之后。</td></tr><tr><td>RecordCount</td><td colspan="4">返回 Recordset 对象的记录数,(在使用键盘光标时,该属怀返回 的可能是不太准确的数值;一般情况下,并不用这种方法来统计 Recordset 中的记录数,因为它的性能并不稳定)</td></tr><tr><td>Bookmark</td><td colspan="4">书签标记,用来保存当前记录的位置。</td></tr><tr><td>AbsolutePosition</td><td colspan="4">用来设定 Recordset 对象中当前记录的顺序位置是第几行记录。</td></tr><tr><td>PageSize</td><td colspan="4">表示 Reccordset 对象的页面大小(每页多少条记录),默认值为10。</td></tr><tr><td>PageCount</td><td colspan="4">表示 Recordset 对象的页面个数。 </td></tr><tr><td>AbsolutePage</td><td colspan="4">表示当前记录的页号。</td></tr><tr><td>EditMode</td><td colspan="4">指示当前记录的编辑状态,0 一 已被编辑;1 一 已被修改而未提交;2 一 存入数据库的新记录 。 </td></tr><tr><td rowspan="11">Status</td><td colspan="4">对 Recordset 对象进行批量更新后,查询当前记录的状态。 </td></tr><tr><td>值</td><td>意义描述</td><td>值</td><td>意义描述</td></tr><tr><td>0</td><td>记录更新成功。</td><td>1024</td><td>存在记录锁定,新记录未保存。</td></tr><tr><td>1</td><td>新记录。</td><td>2048</td><td>使用乐观并发事件,未保存。</td></tr><tr><td>2</td><td>记录被删除。</td><td>4096</td><td>用户违反完整性规则,记录未保存。</td></tr><tr><td>4</td><td>记录未被删除。</td><td>8192</td><td><p>  很待定修改,记录未保存。</p></td></tr><tr><td>8</td><td>记录未被修改。</td><td>16384</td><td>与一存储对象相冲突,记录未保存。</td></tr><tr><td>16</td><td>书签不合法,记录未保存。</td><td>32768</td><td>内存不够,记录未保存。</td></tr><tr><td>64</td><td>影响多个记录,未保存。</td><td>65536</td><td>用户没有中、足够的权限,未保存。</td></tr><tr><td>128</td><td>指向一待定插入,记录未保存。</td><td>131072</td><td>违反基本数据库原则,记录未保存。</td></tr><tr><td>256</td><td>操作被取消,记录未保存。</td><td>262144</td><td>记录已从数据源删除。</td></tr></table>     <p>  五、Rcordset 对象的方法</p>Recordset 对象的方法<表二> <table><tr><td>方法</td><td>描述 / 格式 / 注解 </td></tr><tr><td rowspan="3">Open</td><td>打开一个 Recordset 对象。</td></tr><tr><td>Rs.Open[Source][,ActiveConnection][,CursorType][,LursorType][,Option]</td></tr><tr><td>Rs :为已经建立的 Recordset 对象; <p>  Source :为可选参数,可以是一个 Command 对象名、SQL 语句、数据库表或存储过程; </p><p>  ActiveConnection :定义与数据库的连接信息;</p><p>  CursorType :是Recordset 对象所使用的光标类型;</p><p>  LockTypec 是编辑 Recordset 对象记录时所使用的锁定类型;</p><p>  Option 指示数据提供者如何处理 Source 的内容类型,其参数值及其意义见下表:</p><p>  <table><tr><td>Options值</td><td>意义描述</td></tr><tr><td>1</td><td>表示被执行的字符串包含一个命令文本。</td></tr><tr><td>2</td><td>表示被执行的字符串包含一个表名。</td></tr><tr><td>4</td><td>表示被执行的字符串包含一个存储过程名。</td></tr><tr><td>8</td><td>没有指定字符串的内容(这是默认值)</td></tr></table></p></td></tr><tr><td rowspan="3">Close</td><td>关闭一个 Recordset 对象。 但并不从内存中删除该对象,只是无法读取其中的数据,但仍然可以读取它的属性。因此一个关闭的 Recordset 对象还可以用 Open 方法打开并保持其原有属性。 </td></tr><tr><td>Rs.Close</td></tr><tr><td>Rs:为已经建立的 Recordset 对象;如果正进行编辑更新数据的操作,则在使用此方法之前必须先调用 Update 和 CancelUpdate 方法。否则将会出现错误。</td></tr><tr><td>Clone</td><td>创建一个 Recordset 对象的完全拷贝,但只有所用的 Recordset 对象类型允许使用 Bookmarks时才能使用该方法。</td></tr><tr><td rowspan="2">MoveFirst</td><td>把 Recordset 指针指向第一行记录。 </td></tr><tr><td>Rs.MoveFirst</td></tr><tr><td rowspan="2">MoveLast</td><td>把 Recordset 指针指向最后一条记录(该 Recordset 必须支持书签)。</td></tr><tr><td>Rs.MoveLast</td></tr><tr><td rowspan="2">MovePrevious</td><td>把Recordset 指针上移一行(使用前应判断 BOF 是否为真,该方法必须支持书签)。</td></tr><tr><td>Rs.MovePreviors</td></tr><tr><td rowspan="2">MoveNext</td><td>把Recordset 指针下移一行(使用前应判断 EOF 是否为真)。</td></tr><tr><td>Rs.MoveNext</td></tr><tr><td rowspan="3">Move</td><td>把Recordset 指针指向指定的记录。</td></tr><tr><td>Move n [,start]</td></tr><tr><td>n 为要移动的记录数,取正时表示向前(下)移动,取负时表示向后(上)移动; <p>  start 是可选参数,表示移动的起点。 </p></td></tr><tr><td rowspan="3">GetRows</td><td>从一个 Rexordset 对象读取一行或多行记录到一个数组中。</td></tr><tr><td>Myarray=Rs.GetRows ( rows,start,fields ) </td></tr><tr><td>Myarray 为目标数组名;Rs 为已创建的 Recordset 对象,Rows 为返回数组的行数;start 为读取数据的起点 (书签);Fields 为 Recordset 的字段。 </td></tr><tr><td>NextRecordSet</td><td>清除当前的 Recordset 并执行下一条指令,以传回下一个 Recordset 对象,如果没有下一条指令,则返回 Nothing 给 Recordset 。</td></tr><tr><td>Requery</td><td>重新执行 SQL 操作,以更新 Recordset 对象中的数据。</td></tr><tr><td>Resync</td><td>从数据源更新当前的 Recordset 记录,实现与数据源的同步。</td></tr><tr><td rowspan="3">Addnew</td><td>增加一条空记录。</td></tr><tr><td>Rs.AddNew N</td></tr><tr><td>增加一条空记录,并将数组中的元素(N)添加到这条空记录中。</td></tr><tr><td rowspan="3">Delete</td><td>删除当前记录。</td></tr><tr><td>Delete [value] </td></tr><tr><td>如果 value=1(默认值)表示该方法只删除当前记录,value=2 表示该方法删除所有由 Filter 属性设定的记录。 </td></tr><tr><td rowspan="2">Update</td><td>保存当前记录的任何变动。</td></tr><tr><td>Rs.Update</td></tr><tr><td>CancelUpdate</td><td>取消前一个 Update 方法所做的一切修改。</td></tr><tr><td>UpdateBatch</td><td>Recordset 工作在批量方式时,取消对 Recordset 的更新。</td></tr><tr><td>Suports</td><td>获取创建的 Recordset 对象的能力信息。</td></tr><tr><td colspan="2">注:使用 Move 、MoveFirst 、MoveLast 、MovePrevious 、MoveNext 方法移动记录指针时,需要注意 Rrcordset 对象的光标类型。如“前滚光标”限制了记录指针只能向前移动。</td></tr></table><p>   六、Recordset 对象的应用实例</p><p>   1、这是一个简单的员工基本情况管理系统,其功能有:1)、添加员工资料;2)、更改员工资料;3)、删除员工资料。它包含着六个页面和一个数据库。分别为:</p><p>   1)、主页面:index.asp</p><p>   2)、添加数据页面:add.htm</p><p>   3)、保存添加数据页面:add.asp</p><p>   4)、更改数据页面:Update.asp</p><p>   5)、保存更改数据页面:Update2.asp</p><p>   6)、删除记录页面:Detele.asp</p><p>   7)、数据库:RSGL.mdb.用到该数据库中的”员工基本情况表“。</p><p>   2、各页面的代码如下:</p><p>   1)、主页面:index.asp。该页面的功能有:</p><p>  a、创建两个对象,Connectiion对象和Recordset对象,其目的是连接数据库和返回一个记录集;</p><p>  b、创建一个表格,使do while循环语句将各条记录在表格中显示出来;</p><p>  c)、创建三个超连接,一个用以连接添加数据页面,另一个通过指定的员工姓名连接到更改数据页面,还有一个通过指定的员工姓名连接到删除页面。</p><code><% @ Language="VBScript" %><br /><html><br /><head><title>员工基本情况管理系统</title></head><br /><body><br /><%<br />'****************创建两个对象(连接对象、记录集对象)*********************<br />dim cnn,rst<br />set cnn=Server.CreateObject("ADODB.Connection")<br />set rst=Server.CreateObject("ADODB.Recordset")<br />'指定连接字符串,<br />cnn.ConnectionString="PROVIDER=Microsoft.jet.OLEDB.4.0;Data Source=" & server.MapPath("../rsgl.mdb")<br />cnn.Open<br />sSQL="select * from 员工基本情况表"<br />'rst.Open sSQL,cnn,1,1<br />set rst=cnn.Execute(sSQL,,adCmdText)<br />%><br /><!--************创建一个表格,用以显示数据库中的各条记录***********--><br /><table align="center" border="1"></code><code><caption><h3>教职员工基本情况表</h3></caption><br /><tr colspan="5"><td><a href="add.htm">添加记录</a></td></tr><br /><!--显示各字段名--><br /><tr><td align="center">员工姓名</td><td align="center">所在部门</td><td align="center">家庭住址</td><td align="center">家庭电话</td><td align="center">Email</td><td align="center">状态</td><br /><%<br />'使用do while循环语句将各条记录显示出来。<br />do while Not rst.eof<br />t1=rst("员工姓名")<br />t2=rst("所在部门")<br />t3=rst("家庭住址")<br />t4=rst("家庭电话")<br />t5=rst("Email")<br />tt="<tr align='center'><td>" & t1 & "</td><td>" &t2& "</td><td>" &t3& "</td><td>" &t4& "</td><td>" &t5& "</td><td>"<br />tt=tt & "<a href=Update.asp?id=" & t1 & ">修改</a><a href=Detele.asp?id=" & t1 & ">||删除</a></td></tr>"<br />response.write tt<br />rst.MoveNext<br />loop<br />cnn.Close<br />Set cnn=Nothing<br />%><br /></table><br /></body><br /></html></code>       2)、添加数据页面:add.htm 。本页面由一个表单组成,其功能是向保存添加数据页面(add.asp)提交数据。 <code><html><br />    <head><title>添加记录</title></head><br /><body><br /><div align="center"><br /><form name="form1" method="post" action="add.asp"><br /><table align="center" border="1"><br /><tr><td colspan="2" align="center">员工基本情况表</td></tr><br /><tr><td align="right">员工姓名:</td><br /><td><input type="text" name="txtName"></td></tr><br /><tr><td align="right">所在部门:</td><br /><td><input type="text" name="txtDepartment"></td></tr><br /><tr><td align="right">家庭住址:</td><br /><td><input type="text" name="txtAddr"></td></tr><br /><tr><td align="right">家庭电话:</td><br /><td><input type="text" name="txtTel"></td></tr><br /><tr><td align="right">Email:</td><br /><td><input type="text" name="txtemail"></td></tr><br /><tr><td align="center"><input type="submit" value="提交"></td><br /><td align="center"><input type="reset" value="全部重写"></td></tr><br /></table><br /></form><br /><a href="index.asp">返回首页</a><br /></div><br /></body><br /></html></code>    <p>  3)、保存添加数据页面:add.asp。该页面的功能有:a)、使用Request对象获取从add.htm页面提交的值;b)、创建三个对象(一个连接对象、二个记录集对象),通过rs.addnew,rs.update两个函数将数据保存到数据库;c)、显示信息提示框。</p><code><% @ Language="VBScript" %><br />    <html><br /><head><br /><title>添加记录</title><br /></head><br /><body><br /><!-- #include virtual ="/adovbs.inc" --><br /><%<br />'**************使用Request对象获取从add.htm页面中提交的值************************************<br />Name1=Request.Form("txtName")<br />Department=Request.Form("txtDepartment")<br />Addr=Request.Form("txtAddr")<br />Tel=Request.Form("txtTel")<br />Email=Request.Form("txtEmail")<br />if Tel="" then<br />Tel="不祥"<br />end if<br />if Email="" then<br />Email="不祥"<br />end if<br />if name1="" or department="" or Addr="" then<br />%><br /><script language="vbscript"><br />alert("员工姓名、所在部门和家庭住址中只少有一项为空,请填写完整。")<br />history.back<br /></script><br /><%<br />else<br />'****************创建三个对象(一个连接对象、二个记录集对象)*********************<br />dim cnn,rst<br />set cnn=Server.CreateObject("ADODB.Connection")<br />'指定连接字符串,<br />cnn.ConnectionString="PROVIDER=Microsoft.jet.OLEDB.4.0;Data Source=" & server.MapPath("../rsgl.mdb")<br />cnn.Open<br />'建立Recordset对象并以追加记录方式打开数据库。<br />set rst=Server.CreateObject("ADODB.Recordset")<br />set rst1=Server.CreateObject("ADODB.Recordset")<br />sSQL="select * from 员工基本情况表 where 员工姓名='" & name1 & "'"<br />rst.Open sSQL,cnn,1,1<br />if rst.EOF or rst.BOF then '如果数据表中无此数据,则添加记录。<br />rst1.Open "员工基本情况表",cnn ,1,2<br />rst1.addnew array("员工姓名","所在部门","家庭住址","家庭电话","Email"),array(name1,Department,Addr,Tel,Email)<br />rst1.update<br />%><br /><!--**********显示信息提示框**************--><br /><script language="vbscript"><br />alert("记录添加成功!")<br />window.location.href="index.asp"<br /></script><br /><%<br />rst1.close<br />set rst1=nothing<br />else<br />%><br /><script language="vbscript"><br />alert("员工姓名为:“<%=name1 %>” 的记录已经存在。")<br />history.back<br /></script><br /><%<br />end if<br />rst.close<br />set rst=nothing<br />end if<br />%><br /><h3>记录添加成功!</h3><br /><p><a href="add.htm">返回记录添加表单</a> || <a href="index.asp">返回首页</a><br /></center><br /></body><br /></html></code><p>  4)、更改数据页面:Update.asp。该页面的功能有:a、创建两个对象,Connectiion对象和Recordset对象,其目的是连接数据库和返回一个记录集;b、创建一个表单,其目的是提交更改过的数据。</p><code><%<br />a=request("id")<br />response.write a<br />'response.end<br />'****************创建两个对象(连接对象、记录集对象)*********************<br />dim cnn,rst,cmd<br />set cnn=Server.CreateObject("ADODB.Connection")<br />set rst=Server.CreateObject("ADODB.Recordset")<br />'指定连接字符串,<br />cnn.ConnectionString="PROVIDER=Microsoft.jet.OLEDB.4.0;Data Source=" & server.MapPath("../rsgl.mdb")<br />cnn.Open<br />sSQL="select * from 员工基本情况表 where 员工姓名='" & a & "'"<br />'rst.Open sSQL,cnn,1,1<br />set rst=cnn.Execute(sSQL,,adCmdText)<br />%><br /><html><br /><head><title>更改记录</title></head><br /><body><br /><div align="center"><br /><!--****************创建一个表单*****************************--><br /><form name="form1" method="post" action="Update2.asp"><br /><table align="center" border="1"><br /><tr><td colspan="2" align="center">员工基本情况表</td></tr><br /><tr><td align="right">员工姓名:</td><br /><td><input type="text" name="txtName" value=<%=rst("员工姓名")%> readonly></td></tr><br /><tr><td align="right">所在部门:</td><br /><td><input type="text" name="txtDepartment" value=<%=rst("所在部门")%>></td></tr><br /><tr><td align="right">家庭住址:</td><br /><td><input type="text" name="txtAddr" value=<%=rst("家庭住址")%>></td></tr><br /><tr><td align="right">家庭电话:</td><br /><td><input type="text" name="txtTel" value=<%=rst("家庭电话")%>></td></tr><br /><tr><td align="right">Email:</td><br /><td><input type="text" name="txtemail" value=<%=rst("Email")%>></td></tr><br /><tr><td align="center"><input type="submit" value="提交"></td><br /><td align="center"><input type="reset" value="全部重写"></td></tr><br /></table><br /></form><br /></div><br /></body><br /></html></code><p>  5)、保存更改数据页面:Update2.asp。 该页面的功能有:a)、使用Request对象获取从Update.asp页面提交的值;b)、创建二个对象(连接对象、记录集对象);c)、通过表格显示更改后的记录。</p><code><% @ Language="VBScript" %><br /><%<br />'*****************从提交表单中提取数值***************************<br />Dim Name,Department,Addr,Tel,Email<br />Name=Trim(Request.Form("txtName"))<br />Department=Trim(Request.Form("txtDepartment"))<br />Addr=Trim(Request.Form("txtAddr"))<br />Tel=Trim(Request.Form("txtTel"))<br />Email=Trim(Request.Form("txtEmail"))<br />%><br /><html><br /><head><br /><title>更改记录</title><br /></head><br /><body><br /><!-- #include virtual ="/adovbs.inc" --><br /><%<br />'****************创建二个对象(连接对象、记录集对象)*********************<br />dim cnn,rst,cmd<br />set cnn=Server.CreateObject("ADODB.Connection")<br />set rst=Server.CreateObject("ADODB.Recordset")<br />'指定连接字符串,<br />cnn.ConnectionString="PROVIDER=Microsoft.jet.OLEDB.4.0;Data Source=" & server.MapPath("../rsgl.mdb")<br />cnn.Open<br />sSQL="update 员工基本情况表 set 所在部门='" & Department & "',家庭住址='" & Addr & "',家庭电话='" & Tel & "',Email='" & Email & "' where 员工姓名='" & name & "'"<br />rst.Open sSQL,cnn,1,2<br />set rst=nothing<br />%><br /><!--**************************用表格显示记录。**********************--><br /><table align="center" border="1"><br /><tr><td colspan="2" align="center">员工基本情况表</td></tr><br /><tr><td align="right" width="130" align="center">员工姓名:</td><br /><td width="200"><%=Name %></td></tr><br /><tr><td align="right">所在部门:</td><br /><td><%=Department %></td></tr><br /><tr><td align="right">家庭住址:</td><br /><td><%=Addr %></td></tr><br /><tr><td align="right">家庭电话:</td><br /><td><%=Tel %></td></tr><br /><tr><td align="right">Email:</td><br /><td><%=Email %></td></tr><br /></table><br /><center><br /><p><hr width="505" color="#cc9999"><br /><h3>记录更改成功!</h3><br /><p><a href="index.asp">返回首页</a><br /></center><br /></body><br /></html></code><p>  6)、删除数据页面:Detele.asp。 a)、使用Request对象获取要删除的员工姓名;b)、创建二个对象(连接对象、记录集对象);c)、给出删除成功提示框。</p><code><% @ Language="VBScript" %><br /><%<br />'从提交表单中提取数值<br />Dim Name<br />Name=Trim(Request.Querystring("id"))<br />%><br /><html><br /><head><br /><title>更改记录</title><br /></head><br /><body><br /><!-- #include virtual ="/adovbs.inc" --><br /><%<br />'****************创建二个对象(连接对象、记录集对象)*********************<br />dim cnn,rst,cmd<br />set cnn=Server.CreateObject("ADODB.Connection")<br />set rst=Server.CreateObject("ADODB.Recordset")<br />'指定连接字符串,<br />cnn.ConnectionString="PROVIDER=Microsoft.jet.OLEDB.4.0;Data Source=" & server.MapPath("../rsgl.mdb")<br />cnn.Open<br />sSQL="delete from 员工基本情况表 where 员工姓名=" & "'" & Name & "'"<br />rst.Open sSQL,cnn,1,2<br />set rst=nothing<br />ifo="员工姓名为:“" & name & "” 的记录已被您成功的删除!"<br />%><br /><script languge="vbscript"><br />alert("<%=ifo %>")<br />window.location.href="index.asp"<br /></script><br /><p><a href="index.asp">返回记录添加表单</a><br /></center><br /></body><br /></html></code><p>  <img src="/content/uploadfile/200805/2008053117005063.gif" onclick="get_larger(this)" /><a href="http://tech.ddvip.com/2006-10/11618046459861.html" target="_blank">查看全套"ASP入门基础"教程>>>>></a></p>