资源预览内容
第1页 / 共70页
第2页 / 共70页
第3页 / 共70页
第4页 / 共70页
第5页 / 共70页
第6页 / 共70页
第7页 / 共70页
第8页 / 共70页
第9页 / 共70页
第10页 / 共70页
亲,该文档总共70页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
8.3 记录集对象,本节内容: l 记录集对象的方法、属性及集合 l 记录集对象的基本用法 l 记录集对象的分页显示功能,ADO中的内建对象RecordSet是数据库访问的主要接口,它指向数据表中的一个记录集,有点类似于C语言中指针的概念。在任何时刻一个Recordset对象只能指向一条记录。 对象Recordset存放的是来自表或查询结果的记录集,是按记录(行)和字段(列)的形式构成。可以在非显式打开Connection对象的情况下,打开一个Recordset对象;也可以创建一个Connection对象,然后在该Connection对象上打开多个Recordset对象。,Recordset对象创建一个数据游标的同时,就从数据提供者那里得到一个数据集。通过对创建与管理数据游标的Recordset对象属性的访问与方法的调用,可以在记录一级上对数据库中的数据进行诸如增删记录、更新记录及在记录之间移动等一系列操作。,8.3.1 创建Recordset对象,在使用Recordset对象之前,必须先创建该Recordset对象。创建Recordset对象可用以下几种方式: (1)先创建Connection对象,然后在该Connection对象上创建Recordset对象。 程序见书中sample8-06.asp,该程序首先通过以下语句: Set rs=Server.CreateObject(“ADODB.RecordSet“) 创建Recordset对象后,便可利用其Open方法与数据库中表member连接,从而实现从数据库中读取数据。 (2)直接使用Recordset对象的功能来创建Recordset对象,8.3.2 记录集对象的行为属性 Recordset对象的行为属性 (1)CursorType(游标类型)属性:CursorType属性是Recorset对象中的一个重要属性。该属性决定Recordset对象所使用的游标类型。游标决定了可以对一个记录集进行什么操作,还决定了其他用户可以对一个记录集进行什么样的改变。可以用四种类型的游标打开一个记录集。下面列出了游标的不同类型和限制:,adOpenDynamic(动态游标):常量值2。使用动态游标,可以在记录集中向前或向后移动。其他用户造成的记录的任何变化都将在记录集中有所反映。此类型的游标功能强大同时也是耗费系统资源最多的游标。Dynamic游标可以看到它们保存记录集合的所有变化。使用Dynamic游标的用户可以看到其他用户所做的编辑、增加、删除。如果数据提供者允许这种类型的游标,那么它是通过每隔一段时间从数据源重取数据来支持这种可视性的。毫无疑问这会需要很多的资源。,adOpenKeyset(键集游标):常量值1。其行为类似动态游标,可以在记录集中向前或向后移动。不同的只是禁止查看其他用户添加的记录,并禁止访问其他用户删除的记录,但其他用户所做的数据更改依然可见。 adOpenStatic(静态游标):常量值3。使用静态游标,可以在记录集中向前或向后移动。但是,如果用户在查看数据集同时,数据集发生了更新,删除或添加的操作,它将无法实时反映数据集的变化.,AdOpenFowardOnly(前向游标):常量值0。该类型游标占用最少的资源,因而能得到最高的性能。它也是recordset缺省的游标类型,其行为类似静态游标,唯一的缺点是只能单向移动游标.只能使用movenext这样的方法从头到尾单向遍历记录集,而不能使用moveprev,否则将提示出错。直接使用Command 或Connection对象的Execute方法创建的游标就属于该类游标。,(2)LockType(锁定类型)属性:LockType属性是Recordset对象中的又一个重要属性。当打开记录集时,可以指定锁定类型LockType。锁定就是如何确保数据的完整性,确保更改不会被覆盖 。需要避免的典型情况是多次更新, 比如一个用户改动了一些数据,接着另一 个用户立即又将其做了修改。为了避免这种情况发生,就要锁定记录。有许多不同的方法可以保证记录得到保护,可通过锁定类型来设置这些方法。有下面的四种锁定类型:,AdLockReadOnly:常量值1。Recordset对象以只读方式启动,指定不能修改记录集中的记录,无法运行AddNew、Update及Delete等方法,适用于仅浏览数据的场合。 AdLockOptimstic:常量值3。直到用Update方法提交更新记录时才锁定记录。,AdLockPessimistic:常量值2。当修改记录时,数据提供者将尝试锁定记录以确保成功地编辑记录。只要编辑一开始,则立即锁住记录。 AdLockBatchOptimstic:常量值4。同时更新多笔数据时,暂不将更新数据存入数据库,而是暂存在缓冲区中,等待UpdateBatch调用后才将数据一次性写入数据库。指定记录只能成批地更新。 当不需要改动任何记录时,应该使用只读的记录集,这样提供者不用做任何检测。对于一般的使用AdLockOptimstic,(3)Filter属性:该属性是Recordset对象的一个重要属性。虽然能使用SQL语句方便地对数据库中的记录进行过滤,但要频繁的使用SQL语句更新数据集将增大系统的负担,降低系统性能。使用Filter属性将可以方便地对Recordset对象的数据集设置过滤条件。,Filter属性的语法格式如下: Recordset.Filter=Criteria.String 其中Criteria.String就是过滤条件字符串,它可由一个或多个用AND或OR等逻辑运算符连接的子句组成。 每个过滤条件由组成,如“name=Jane“。若有两个或两个以上的过滤条件,则使用AND或OR逻辑运算符将各个过滤条件连接起来。,每个过滤条件使用时应遵循以下规则: FieldName必须为当前Recordset中的有效字段名。如果字段名包含空格,必须用方括号将字段名括起来。 Operator是关系运算符。可以是 、= 、 、=或LIKE等运算符。 Value用于与对应字段匹配的值,如Jane等(字符串和日期使用单引号)。如果Operator为LIKE,Value可以使用匹配符,可以使用星号(*)和百分号(%),星号(*)匹配任意个字符,而百分号(%)匹配任意一个字符。,在LIKE 子句使用通配符时,一般通配符只在开头或结尾处使用。 使用过滤条件后,ADO将记录集按该过滤条件过滤出相应的记录。若没有符合过滤条件的记录,则Recordset对象的RecordCount属性将返回0,也可通过EOF和BOF的值来判断。 过滤条件使用完毕,需解除该过滤条件时,只要将空字符串赋值该Filter属性即可,如: ,(4)CacheSize属性:当一个Recordset对象打开时,从数据源中返回所需的记录数据,并将其保存在缓冲区中。用该属性指定一个Recordset对象一次可存于缓冲区中记录的数目,即从数据库服务器上一次可以取得多少个记录,默认值为1。改变该属性值为一个适当的值可以提高数据库服务器的效率。下面的脚本将CacheSize设定为6: ,(5)MaxRecords属性:该属性指示通过查询返回给Recordset记录的最大数目。默认值为0,即返回所有所需的记录。 在打开Recordset前,该属性是可读写的,用MaxRecords属性可限制数据提供者从数据源返回的记录数。而Recordset打开后,该属性是只读的。,2 与游标移动有关的属性 (1)BOF属性:该属性指明当前记录指针是否在首记录之前。若当前记录指针已经移动到第一条记录之前,则BOF返回True。如果当前记录集没有记录,则BOF也返回Ture。一般在使用MovePrevious方法前,可以通过检测BOF的值,来判断是否已经将当前记录指针移到首条记录之前。,(2)EOF属性:该属性指明当前记录指针是否在尾记录之后。若当前记录指针已经在最后一个记录之后,则EOF返回Ture。如果当前记录集中不存在记录,则EOF也返回Ture;指针在其他位置时返回False。该属性一般用于对记录集进行从头到尾的遍历时使用,一般在使用MoveNext或者Move方法前,可以通过检测该属性,来判断是否已经到了记录集末尾。,(3)BookMark属性:该属性只有在Recordset对象支持BookMark时才有效。当在记录集中移动时,可能需要保留记录的位置,以后再移回来。同真实的书签相似,一个记录集书签是一个指向单个记录的唯一的指针。,(4)RecordCount属性:该属性返回Recordset对象中记录的个数,为一长整型值。使用RecordCount属性可确定Recordset对象中记录的数目。ADO无法确定记录数时该属性返回-1。该属性仅在打开与数据源的连接后才能使用。读已关闭的Recordset上的RecordCount属性将产生错误。 当CursorType属性设置为adOpenForwardOnly游标类型时,RecordCount属性是无效的。因为当数据库在处理查询时,Recordset正在数据库中继续查找匹配的数据。因此在数据库中所有记录查完之前,RecordCount属性是无效的。,(5)AbsolutePage属性:该属性可以设置或返回当前记录的绝对页号。通过使用该属性,就可以按PageSize属性指定的页记录数在数据集中移动当前记录指针的位置,直接跳到某一页。通常,AbsolutePage为从1开始到当前数据集的最大页数。需要注意的是,AbsolutePage属性的使用需要数据提供者提供支持才能有效地使用。,(6)PageCount属性:该属性用来返回Recordset对象中包含的数据页数,为一长整型值。“页”的大小等于PageSize属性所设置的值,即每页记录的个数。只有最后一页的记录个数可能小于PageSize,而其它页的记录个数均等于PageSize。若Recordset对象不支持该属性,则该属性返回-1,表明PageCount无法确定。,(7)PageSize属性:该属性定义Recordset中一页所包含的记录数,为一长整型值。默认值为10。当记录集返回到Recordset时,该记录集就被逻辑地划分为每页记录个数为PageSize的若干页,除最后一页外每页包含PageSize个记录。页的大小确定后,允许使用AbsolutePage属性移动到特定页的第一个记录。在用户希望对数据进行分页显示时,该属性将非常有用,可以在快速地移动到某一页后,对该页中的记录进行操作。,(8)AbsolutePosition属性:该属性用于设置Recordset对象当前记录的顺序位置。通常,这个顺序号从1开始到当前数据集的记录总数。需要注意的是,设置AbsolutePosition属性时,ADO将从数据源中再次读取数据集,记录顺序将发生改变。,3 与记录排列顺序有关的属性 (1)CursorLocation属性:该属性决定 Recordset对象能否被排序及 CursorLocation的类型。其语法格式如下: Recordset. CursorLocation=Value 其中Value的值可以取以下两常量值: adUseServer:常量值为2。使用服务器端提供的游标,为系统默认值。若设置为该值,则Recordset对象将Sort属性进行排序。 AdUseClient:常量值为3。使用客户端提供的游标。若设置为该值,就能使用Sort属性对Recordset对象进行排序。,(2)Sort属性:该属性指定数据集将按哪些字段进行升序或降序排序。它可以设置或返回一个用逗号分隔的字段名排序字符串,其中的每个名称是Recordset中的Field。其语法格式如下: Recordset.Sort=SortOrder 其中SortOrder为指定的排序字段或若干个排序关键字组成的字符串,可以使用关键词ASC指定升序排序或使用关键词DESC指定降序排序。,4 与系统
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号