用户工具

站点工具


api_v2:easp.db.getpagerecord



Easp.db.GetPageRecord 方法

初始化分页数据并得到记录集

语法

Set rs = Easp.db.GetPageRecord(type[:pageParam][:pageSize], arrayConfig|sql|recordset)

别名

Set rs = Easp.db.GPR(type[:pageParam][:pageSize], arrayConfig|sql|recordset)

参数

rsRecordset (记录集对象)
 已定义的未初始化的记录集对象
type"" (空字符串) 或 Integer (整数) 或 String (字符串)
 获取分页数据的方式,可以是以下值:
 0 或 "array" - 用数组设置数据库查询条件生成分页。
 1 或 "sql" - 直接用SQL语句生成分页。
 2 或 "rs" - 直接用已经存在的记录集生成分页。
 MSSQL存储过程名称 - 用以该字符串命名的存储过程生成分页。
 ""(空字符串) - 使用默认的存储过程或者Easp.db.PageSpName属性中指定的存储过程分页
pageParam (可选)String (字符串)
 获取分页页码的URL参数名称,如果省略则采用 Easp.db.PageParam 属性设定的值,不设置则默认为“page”。
pageSize (可选)Integer (整数)
 每页显示的记录数,如果省略则采用 Easp.db.PageSize 属性设定的值,不设置则默认为每页显示20条。
arrayConfigArray (数组)
 数组条件,仅在 type 参数的值为 0 或 "array" 或用存储过程生成分页时生效。当 type 参数不同时,此数组参数参数格式亦有所不同:

 (1) type 为 0 或 "array" 时,arrayConfig 为以下格式(和 Easp.db.GetRecord 类似,多一个主键参数):
Array(Table:Fields, Where, OrderBy, PrimeKey) 
Table - 表名, Fields - 字段名, Where - 条件(不包含"Where",可以是数组,格式参照"参数约定"), OrderBy - 排序(不包含"Order By"), PrimeKey - 主键名(Access 和 MySQL 可省略此项)

 (2) type 为存储过程名时,arrayConfig 格式和 Easp.db.DoSP 方法的第二个参数一致,但要注意一点,必须包含两个输出参数:"@@RecordCount"(总记录数)和"@@PageCount"(总页数)。

 (3) 当使用EasyASP自带的默认存储过程"easp_sp_pager"时,arrayConfig 为以下格式:
Array(Table, Fields, Where, OrderBy, PrimeKey, SortType) 
Table - 表名, Fields - 字段名, Where - 条件(不包含"Where"), OrderBy - 排序(不包含"Order By",SortType为3时生效,必须在最后加上主键排序,否则可能出错), PrimeKey - 主键名, SortType - 排序类型(1主键升序,2主键降序,3其它排序)。
sqlString (字符串)
 第二个参数应为用以获取记录集的SQL语句,仅在 type 参数的值为 1 或 "sql" 时生效。当使用SQL语句生成分页时,分页的方式采用原始的ADO的方式分页,所以在循环显示生成的记录集时要用rs.PageSize属性控制记录的数量,具体可见下面的示例。
recordsetRecordset (记录集对象)
 一个已经存在的记录集(Recordset)对象,仅在 type 参数的值为 2 或 "rs" 时生效。当使用已存在记录集生成分页时,分页的方式采用原始的ADO的方式分页,所以在循环显示生成的记录集时要用rs.PageSize属性控制记录的数量,具体可见下面的示例。

返回值

Recordset (记录集对象)经过分页的记录集

注释

调用此方法将按指定的方式生成分页数据记录集,并设定分页导航所需的总记录数和总页数。

示例

下面的例子说明了采用Array方式生成分页数据方法:

Set rs = Easp.db.GetPageRecord(0,Array("UserInfo:UserId,UserName","UserSex='Male' And UserAge>20","UserName Asc","UserId")) 
采用默认存储过程生成分页数据的方法:
Set rs = Easp.db.GPR("easp_sp_pager",Array("UserInfo","UserId,UserName","UserSex='Male' And UserAge>20","UserName Asc,UserId Asc","UserId",3))
采用自定义存储过程生成分页数据的方法,假设存储过程名为"myPager":
Set rs = Easp.db.GPR("myPager",Array("@Table:UserInfo","@Fields:UserId,UserName","@Condition:UserSex='Male' And UserAge>20","@Sort:UserName Asc,UserId Asc","@PrimeKey:UserId","@@RecordCount","@@PageCount"))
如果你事先指定了 Easp.db.PageSpName 属性的值,则上面的第一个参数存储过程的名称可以为空。以上代码采用了默认的页码URL参数为"page",每页记录数为20条,如果要临时改变这些设置,可以这样:
'url参数名为"p",每页记录数为30条   
Set rs = Easp.db.GPR("0:p:30", Array("UserInfo","UserId>100","UserId Desc","UserId"))   
'仅修改记录数为每页30条   
Set rs = Easp.db.GPR("easp_sp_pager:30", Array("UserInfo","*","UserId>100","UserId Desc","UserId",2))
在用上面的几种方法生成分页记录集时,得到的记录集大小和设定的每页记录数大小一致。所以可以用下面的方法循环显示记录集数据:
Set rs = Easp.db.GPR("0:30", Array("UserInfo","UserId>100","UserId Desc","UserId"))   
While Not rs.Eof  
    Easp.wn rs("UserName") & "的年龄是:" & rs("UserAge") & "岁。"  
    rs.MoveNext()   
Wend  
还有另外两种方法,下面的例子说明了根据SQL语句生成分页数据方法:
Set rs = Easp.db.GPR("sql","Select UserName, UserAge From UserInfo Where UserSex='Male' Order By UserName ASC")
下面的例子说明了根据已存在记录集对象生成分页数据方法:
Set rsUser = Easp.db.GRS("UserInfo:UserName,UserAge",Array("UserSex:Male","IsActive:1"),"UserName ASC")
Set rs = Easp.db.GPR("rs:30",rsUser)
上面这两种方法("sql"和"rs")和Access数据库在使用第一种方法("array")时都是用ADO原始的方法处理分页,所以如果要分页循环显示记录集数据,需要结合记录集的PageSize属性或者将记录集转为二维数组,如:
Dim rs, i   
'获取记录集   
Set rs = Easp.db.GPR("sql","Select UserName, UserAge From UserInfo Where UserSex='Male' Order By UserName ASC")   
  
'循环方式一:用 While...Wend   
i = 0   
While Not rs.Eof And ( i < rs.PageSize )   
    Easp.wn rs("UserName") & "的年龄是:" & rs("UserAge") & "岁。"  
    i = i + 1   
    rs.MoveNext()   
Wend  
'=========================   
rs.MoveFirst()   
 
'循环方式二:用 For...Next   
For i = 1 To rs.PageSize  
    If rs.Eof Then Exit For  
    Easp.wn rs(0) & "的年龄是:" & rs(1) & "岁。"  
    rs.MoveNext()   
Next  
'=========================   
rs.MoveFirst()   
'循环方式三:用 rs.GetRows() 和 For...Next   
Dim arrRS   
arrRS = rs.GetRows(rs.PageSize)   
'转为数组后可以关闭记录集   
Easp.C(rs)   
For i = 0 To Ubound(arrRS,2)   
    Easp.wn arrRS(0,i) & "的年龄是:" & arrRS(1,i) & "岁。"  
Next  
'=========================   
获取更多详细分页功能示例,请查看 EasyASP完整分页代码示例 。

api_v2/easp.db.getpagerecord.txt · 最后更改: 2014/09/01 16:44 (外部编辑)