1、Recordset 记录集对象的属性和方法dadaV20160215Recordset 对象的作用是由数据库返回记录集。根据查询结果返回一个包含所查询数据的记录集,然后显示在页面上。因为删除、更新、添加操作不需要返回记录集,因此可以直接使用连接对象或是命令对象的 Exexut 方法,但是利用记录集对象有时会更简单,此外,通过记录集对象能够实现比较复杂的数据库管理任务,比如要采用分页显示记录就必须使用记录集对象。Recordset 对象可以用来代表表中的记录,可以把记录集看成是一张虚拟的表格,包含一条或多条记录(行),每条记录包含一个或多个字段,但任何时候只有一条记录为当前记录。可以在非显式建立
2、连接对象的情况下,直接打开一个带有查询的记录集,或是对命令对象的查询返回一个记录集。ADO 提供这种灵活性,可以用最简单的方式指明一个字符串来说明连接方式,从而得到数据库的查询结果,ADO 会自动创建所需要的连接对象。当然也可以显式创建连接对象和命令对象,这样可以获得更多的灵活性,实现更为强大的功能。一、 建立 Recordset 对象创建记录集的方法主要有两种。可以先建立连接对象,再创建记录集对象;也可以在非显式建立连接对象的情况下,创建记录集对象。第一种,先建立连接对象,再创建记录集对象,用法见下面的范例。范例 6-23:先建立连接对象,再创建记录集对象注意:为了说明问题的方便,给记录集对
3、象取名为 rs,本书下面的实例中记录集对象名均为 rs。第二种,在非显式建立连接对象的情况下,用 Server 对象的 CreatObject 方法建立并打开记录集对象,语法如下:Set rs=Server.CreateObject(“ADODB.Recordset“)rs.Open 参数Open 方法的参数见表 6-16。表 6-16 Open 方法的参数参数 说明Source 数据库查询信息ActiveConnection 数据库连接信息CursorType 记录集中的指针类型,可选,见表 6-17LockType 锁定类型,可选,见表 6-18Options 数据库查询信息类型,可选,见
4、表 6-19CursorType 参数值表 6-17:表 6-17 CursorType 参数值参数 值 说明AdOpenForwardOnly0向前指针,默认值。只能用 MoveNext 方法或 GetRows 方法向前单向移动指针,所耗系统资源最少,执行速度也最快,但很多属性和方法将不能用AdOpenKeyset 1键盘指针,记录集中可以前后移动。某一用户修改数据后,其他用户可以立即显示,但禁止查看其他用户添加和删除的记录AdOpenDynamic 2动态指针,记录集中可以前后移动。所有修改会立即在其他客户端显示,功能强大,但所耗系统资源也多AdOpenStatic 3静态指针,记录集中可
5、以前后移动。所有修改不会在其他客户端显示说明: 关于指针(又称游标)。所谓记录集,如同一个电子表格,包含所获取的若干记录,每条记录又包含若干字段。如果记录不为空,打开记录集后,指针指向第一条记录。可以通过移动指针在记录集中漫游,指针所指向的记录为当前记录,当前记录只能有一条。 在默认情况下,当打开记录集,为向前指针,只能用 MoveNext 方法向前单向移动指针,其他操作不受支持。如果需要编辑、添加和删除记录,想使用可前后移动的指针,并且需要看到其他用户的对数据库的修改,就需要使用其他类型的指针。LockType 参数值表 6-18:表 6-18 LockType 参数值参数 值 说明AdLo
6、ckReadOnly 1 只读,默认值,适用于仅浏览数据AdLockPessimistic 2 只能同时被一个用户所修改,修改时锁定,完毕解锁AdLockOptimistic 3可以同时被多个用户所修改,直到用 update 方法更新记录才锁定AdLockBatchOptimistic4数据可以被修改,且不锁定其他用户,指定数据成批更新说明: 锁定目的是确保数据的完整性,以防止更改被覆盖。 当不需要修改记录,应该使用默认的只读记录集,这样执行速度快,消耗系统资源少;如果是需要修改记录,一般情况下,选择取值 2,记录只锁定一下,即可保护更改操作,也不消耗过多的系统资源。Options 参数值表
7、6-19:表 6-19 Options 参数值参数 值 说明AdCmdUnkown-1表示 CommandText 参数类型无法确定,默认值AdCmdText 1 表示 CommandText 参数是命令类型AdCmdTable 2 表示 CommandText 参数是表名称AdCmdStoreProc3 表示 CommandText 参数是存储过程名称范例 6-24:建立记录集对象说明: 非显式创建连接对象和命令对象。 Select * from article这个查询字符串定义后,记录集对象会自动把它转换到一个命令对象上。 dsn=zbsdbbszb这是创建连接对象的连接字符串。二、Rec
8、ordset 记录集对象的属性Recordset 记录集对象常用属性见表 6-20。表 6-20 Recordset 记录集对象常用属性见表属性 说明Source指示记录集对象中数据的来源(命令对象名或 SQL 语句或表名)ActiveConnection 连接对象名或包含数据库的连接信息的字符串CursorType 记录集中的指针类型,可选,见表 6-16LockType 锁定类型,可选,见表 6-17MaxRecors 控制从服务器获取的记录集的最大记录数CursorLocation 控制数据处理是在客户端还是在服务器端Filter 控制要显示的内容Bof 记录集的开头Eof 记录集的结尾
9、RecordCount 记录集总数PageSize 分页显示时每一页的记录数PageCount 分页显示时数据页的总页数AbsolutePage 当前指针所在的数据页AbsolutePosition 当前指针所在的记录行Recordset 记录集对象常用属性具体说明如下。1Source用于设置数据库的查询信息,查询信息可以是命令对象名或 SQL 语句或表名,语法如下:rs.Source=查询信息2ActiveConnection用于设置数据库的连接信息,连接信息可以是连接对象名或包含数据库的连接信息的字符串,语法如下:rs.ActiveConnection=连接信息3CursorType用于设
10、置记录集指针类型,取值参见表 6-17,语法如下:rs.CursorType=值默认为 0,即指针只能前移。如果要让指针自由移动,一般设为键盘指针 1。4 LockType用于设置记录集的锁定类型。取值参见表 6-18,语法如下:rs.LockType=值默认为 1,只读属性。如果要利用记录集对象进行添加、删除、更新等操作,只能由一个用户修改,一般需要设置其属性为 2。5MaxRecors用于设定从服务器上得到的最大记录数,语法如下:rs.MaxRecors=最大记录数通常这种方法不常用,而是使用 SQL 语句来指定所得到的最大记录数,”Select Top 整数” 。6CursorLocat
11、ion用于设置数据处理是在客户端还是在服务器端。取值参见表 6-21,语法如下:rs.CursorLocation =值表 6-21 CursorLocation 参数值参数 值 说明AdUseClient 1 客户端处理AdUseServer 2 服务器端处理AdUseClientBatch3动态处理,在客户端处理,处理时连接切断,处理完毕重新连接有的时候,为了减轻服务器的工作负担,可以根据情况的需要,设置在客户端处理。7Filter用于设置要显示的内容。取值参见表 6-22,语法如下:rs.Filter =值表 6-22 Filter 参数值参数 值 说明AdFilterNone 0 显示
12、所有数据AdFilterpendRecords 1 只显示没有修改过的数据AdFilterAffectedRecords 2 只显示最近修改过的数据AdFilterFetchedRecords 3 只显示暂存于客户端缓存中的数据8BOF用于判断当前记录指针是否在记录集的开头,如在开头,返回 True,否则返回 Falsh。如果记录集为空,也返回 True。9EOF用于判断当前记录指针是否在记录集的结尾,如在结尾,返回 True,否则返回 Flash。如果记录集为空,也返回 True。记录集有两个特殊位置:BOF 和 EOF。BOF 表示记录集的开头,位于第一条记录之前;EOF 表示记录集结尾,
13、位于最后一条记录之后。BOF 为 True,当前指针指到 RecordSet 的第一条记录; EOF为 True,当前指标指到 RecordSet 的最后一条记录。如果记录集不为空,指针可以在 BOF、所有记录和 EOF 移动。如果记录集为空,此时指针同时指向 BOF 和 EOF,它们的值均为 True。具体判断如下:若当前记录的位置是在一个 Recordset 对象第一行记录之前时, BOF 属性返回True,反之则返回 False。;若当前记录的位置是在一个 Recordset 对象最后一行记录之后时,EOF属性返回 True,反之则返回 False;BOF 与 EOF 都为 False,
14、表示指标位于 RecordSet 的当中;BOF 与 EOF 都为 True,在 RecordSet 里没有任何记录。 从以上可知,通过检验 BOF 与 EOF 属性,可以得知当前指针所指向的 RecordSet 的位置,使用BOF 与 EOF 属性,可以得知一个 Recordset 对象是否包含有记录或者得知移动记录行是否已经超出该 Recordset 对象的范围。判断记集录是否为空的代码如下:循环输出记录集记录的代码如下:10RecordCount用于返回记录集中的记录总数。我们常用 RecordCount 属性来找出一个 Recordset 对象包括多少条记录。例如: 要注意的是,使用
15、RecordCount 必须设置指针类型为键盘指针 1 或是静态指针 3。11PageCount用于设置分页显示时数据页的总数。使用 PageCount 属性,决定 Recordset 对象包括多少“页”的数据。这里的“页”是指数据记录的集合,大小等于 PageSize 属性的设定,即使最后一页的记录数比PageSize 的值少,最后一页也算是 PageCount 的一页。12 PageSize 属性 用于设置分页时每一页所显示的记录数。PageSize 属性是决定 ADO 存取数据库时如何分页显示的关键,使用它就可以决定多少记录组成一个逻辑上的“1 页”。 第 10、 11、12 条属性通常
16、是用于分页显示,具体运用见下面的范例。13AbsolutePage用于设置当前指针位于哪一页。语法如下:rs.AbsolutePage =整数值14AbsolutePosition用于设置当前指针所在的记录行。语法如下:rs.AbsolutePosition =整数值后面的这些属性使用时,一般需要设置指针类型为键盘指针 1。三、 Recordset 记录集对象的方法Recordset 记录集对象的常用方法见表 6-23。表 6-23 Recordset 记录集对象的方法方法 说明Open 打开记录集Close 关闭记录集Requery 重新打开记录集Move 指针移至指定记录MoveFirst
17、 指针移至第一条记录MoveLast 指针移至最后一条记录MovePrevious 指针移至上一条记录MoveNext 指针移至下一条记录AddNew 添加记录Delete 删除记录Update 更新记录CancelUpdate 取消更新GetRows 从记录集得到多行记录Resync 与数据库服务器同步更新具体说明如下。1 Open用于打开记录集,语法如下:rs.Open 参数2 Close用于关闭记录集,语法如下:rs.Close使用 Close 方法关闭记录集对象,Close 方法并不会将记录集对象从内存中清除,如果的确不再需要这个对象,可以用下列语句清除这个对象,以完全释放所占用的系统
18、资源。3 Requery用于重新打开记录集,语法如下:rs.Requery4Move 用于将指针移动到指定记录,语法如下: rs.Move NumRecords,Start NumRecords 是一个正负数运算式,用于设定当前记录位置的前后移动数目,如果为正值表示向前移动(即记录集的未尾方向)多少条记录,如果为负值表示向后移动(即记录集的开始方向)多少条记录;Start 是一个可选的项目,用来指定记录起始的位置,默认为当前指针位置。 5MoveFirst用于将指针移动到第一条记录,语法如下:rs.MoveFirst6MoveLast用于将指针移动到最后一条记录,语法如下:rs.MoveLas
19、t7MovePrevious用于将指针移动到上一条记录,语法如下:rs.MovePrevious8MoveNext用于将指针移动到下一条记录,语法如下:rs.MoveNextMove 和 MoveFirst 、MoveLast、MoveNext、MovePrevious 方法用于指针的移动。MoveNext 是最常用的方法,执行速度快。如果使用其他方法,一般要设置指针类型为键盘指针。在使用这几个有关指针移动的方法之前,最好用 Bof 和 Eof 进行判断是否已达记录集的边界,否则超越边界,就会出错。9AddNew用于向数据库添加记录,语法如下:rs.AddNew 添加记录的信息10Delete
20、 用于向数据库删除当前记录,语法如下:rs.Delete指针当前指向哪条记录,就是当前记录。11Update用于向数据库更新记录。它有两种情况。第一种,执行完 AddNew 或 Delete 后,执行 Update 更新,语法如下:rs.Update第二种,直接用 Update 方法更新,语法如下:rs.Update 更新记录的信息例如,以下是采用第一种方法更新数据如果采用第二种方法,可以直接写成:12CancelUpdate用于取消更新记录的操作,语法如下:rs.CancelUpdate 13GetRows用于从记录集中的当前记录开始返回多行记录,它将返回一个二维数组,语法如下:rs.Get
21、Rows(number) 参数用于设置要返回多少条记录,默认为-1,也就是全部记录。在返回的二维数组中,第一维表示列,第二维表示行。14Resync用于将客户端记录集与服务器同步更新。当多人同时打开数据库进行更新操作,采用这个方法可以实时查看其他用户的更新数据,语法如下:rs.Resync 参数参数取值见表 6-24。表 6-24 Resync 参数值参数 值 说明AdAffectCurrent 1 只同步更新当前指针所在的记录行AdAffectGroup 2 同步更新所有匹配 Filter 属性的记录行AdAffectAll 3 同步更新记录集中的所有数据范例 6-25:显示记录的操作“ 循环输出姓名rs.MovenextLoop %说明:采用 rs(“字段名”)可以很容易得到当前记录的字段值,然后直接输出显示或是赋予一个变量。范例 6-26:添加记录的操作范例 6-27:更新记录的操作范例 6.29:删除记录的操作