用户工具

站点工具


api_v2:easp.db.getpagerecord

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

api_v2:easp.db.getpagerecord [2014/09/01 16:44] (当前版本)
行 1: 行 1:
 +===== Easp.db.GetPageRecord 方法 =====
 +初始化分页数据并得到记录集
 +==== 语法 ====
 +<sxh asp>Set rs = Easp.db.GetPageRecord(type[:​pageParam][:​pageSize],​ arrayConfig|sql|recordset)</​sxh>​
 +==== 别名 ====
 +<sxh asp>Set rs = Easp.db.GPR(type[:​pageParam][:​pageSize],​ arrayConfig|sql|recordset)</​sxh>​
 +==== 参数 ====
 +|//​**rs**//​|<​wrap lo>​Recordset (记录集对象)</​wrap>​|
 +|:::​| 已定义的未初始化的记录集对象|
 +|//​**type**//​|<​wrap lo>""​ (空字符串) 或 Integer (整数) 或 String (字符串)</​wrap>​|
 +|:::​| 获取分页数据的方式,可以是以下值: \\  0 或 "​array"​ - 用数组设置数据库查询条件生成分页。 \\  1 或 "​sql"​ - 直接用SQL语句生成分页。 \\  2 或 "​rs"​ - 直接用已经存在的记录集生成分页。 \\  MSSQL存储过程名称 - 用以该字符串命名的存储过程生成分页。\\  ""​(空字符串) - 使用默认的存储过程或者Easp.db.PageSpName属性中指定的存储过程分页|
 +|//​**pageParam**//​ ''//​(可选)//''​|<​wrap lo>​String (字符串)</​wrap>​|
 +|:::​| 获取分页页码的URL参数名称,如果省略则采用 [[api_v2:​Easp.db.PageParam|Easp.db.PageParam]] 属性设定的值,不设置则默认为“page”。|
 +|//​**pageSize**//​ ''//​(可选)//''​|<​wrap lo>​Integer (整数)</​wrap>​|
 +|:::​| 每页显示的记录数,如果省略则采用 [[api_v2:​Easp.db.PageSize|Easp.db.PageSize]] 属性设定的值,不设置则默认为每页显示20条。|
 +|//​**arrayConfig**//​|<​wrap lo>Array (数组)</​wrap>​|
 +|:::​| 数组条件,仅在 //''​type''//​ 参数的值为 0 或 "​array"​ 或用存储过程生成分页时生效。当 //''​type''//​ 参数不同时,此数组参数参数格式亦有所不同:\\ \\  (1) //''​type''//​ 为 0 或 "​array"​ 时,//''​arrayConfig''//​ 为以下格式(和 [[api_v2:​Easp.db.GetRecord|Easp.db.GetRecord]] 类似,多一个主键参数):\\ ​   Array(Table:​Fields,​ Where, OrderBy, PrimeKey) \\ ​   Table - 表名, Fields - 字段名, Where - 条件(不包含"​Where"​,可以是数组,格式参照[[api_v2:"​参数约定"​|"​参数约定"​]]), OrderBy - 排序(不包含"​Order By"​), PrimeKey - 主键名(Access 和 MySQL 可省略此项)\\ \\  (2) //''​type''//​ 为存储过程名时,//''​arrayConfig''//​ 格式和 [[api_v2:​Easp.db.DoSP|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其它排序)。|
 +|//​**sql**//​|<​wrap lo>​String (字符串)</​wrap>​|
 +|:::​| 第二个参数应为用以获取记录集的SQL语句,仅在 //''​type''//​ 参数的值为 1 或 "​sql"​ 时生效。当使用SQL语句生成分页时,分页的方式采用原始的ADO的方式分页,所以在循环显示生成的记录集时要用rs.PageSize属性控制记录的数量,具体可见下面的示例。|
 +|//​**recordset**//​|<​wrap lo>​Recordset (记录集对象)</​wrap>​|
 +|:::​| 一个已经存在的记录集(Recordset)对象,仅在 //''​type''//​ 参数的值为 2 或 "​rs"​ 时生效。当使用已存在记录集生成分页时,分页的方式采用原始的ADO的方式分页,所以在循环显示生成的记录集时要用rs.PageSize属性控制记录的数量,具体可见下面的示例。|
  
 +==== 返回值 ====
 +|//​**Recordset** <wrap lo>​(记录集对象)</​wrap>//​|经过分页的记录集\\ |
 +==== 注释 ====
 +>​调用此方法将按指定的方式生成分页数据记录集,并设定分页导航所需的总记录数和总页数。\\ ​
 +==== 示例 ====
 +下面的例子说明了采用Array方式生成分页数据方法:\\ ​
 +<sxh asp;​title:​demo.asp>​
 +Set rs = Easp.db.GetPageRecord(0,​Array("​UserInfo:​UserId,​UserName","​UserSex='​Male'​ And UserAge>​20","​UserName Asc","​UserId"​)) ​
 +</​sxh>​
 +采用默认存储过程生成分页数据的方法:\\ ​
 +<sxh asp;​title:​demo.asp>​
 +Set rs = Easp.db.GPR("​easp_sp_pager",​Array("​UserInfo","​UserId,​UserName","​UserSex='​Male'​ And UserAge>​20","​UserName Asc,UserId Asc","​UserId",​3))
 +</​sxh>​
 +采用自定义存储过程生成分页数据的方法,假设存储过程名为"​myPager"​:\\ ​
 +<sxh asp;​title:​demo.asp>​
 +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"​))
 +</​sxh>​
 +如果你事先指定了 [[api_v2:​Easp.db.PageSpName|Easp.db.PageSpName]] 属性的值,则上面的第一个参数存储过程的名称可以为空。以上代码采用了默认的页码URL参数为"​page"​,每页记录数为20条,如果要临时改变这些设置,可以这样:\\ ​
 +<sxh asp;​title:​demo.asp>​
 +'​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))
 +</​sxh>​
 +在用上面的几种方法生成分页记录集时,得到的记录集大小和设定的每页记录数大小一致。所以可以用下面的方法循环显示记录集数据:\\ ​
 +<sxh asp;​title:​demo.asp>​
 +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  ​
 +</​sxh>​
 +还有另外两种方法,下面的例子说明了根据SQL语句生成分页数据方法:\\ ​
 +<sxh asp;​title:​demo.asp>​
 +Set rs = Easp.db.GPR("​sql","​Select UserName, UserAge From UserInfo Where UserSex='​Male'​ Order By UserName ASC")
 +</​sxh>​
 +下面的例子说明了根据已存在记录集对象生成分页数据方法:\\ ​
 +<sxh asp;​title:​demo.asp>​
 +Set rsUser = Easp.db.GRS("​UserInfo:​UserName,​UserAge",​Array("​UserSex:​Male","​IsActive:​1"​),"​UserName ASC")
 +Set rs = Easp.db.GPR("​rs:​30",​rsUser)
 +</​sxh>​
 +上面这两种方法("​sql"​和"​rs"​)和Access数据库在使用第一种方法("​array"​)时都是用ADO原始的方法处理分页,所以如果要分页循环显示记录集数据,需要结合记录集的PageSize属性或者将记录集转为二维数组,如:\\ ​
 +<sxh asp;​title:​demo.asp>​
 +Dim rs, i   
 +'​获取记录集 ​  
 +Set rs = Easp.db.GPR("​sql","​Select UserName, UserAge From UserInfo Where UserSex='​Male'​ Order By UserName ASC"​) ​  
 +</​sxh>​
 +<sxh asp;​title:​demo1.asp>  ​
 +'​循环方式一:用 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() ​  
 +</​sxh>​
 +<sxh asp;​title:​demo2.asp> ​
 +'​循环方式二:用 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() ​  
 +</​sxh>​
 +<sxh asp;​title:​demo3.asp>​
 +'​循环方式三:用 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  ​
 +'​========================= ​  
 +</​sxh>​
 +获取更多详细分页功能示例,请查看 EasyASP完整分页代码示例 。\\ 
api_v2/easp.db.getpagerecord.txt · 最后更改: 2014/09/01 16:44 (外部编辑)