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