VB数据分页[转]

ADO的实现

AbsolutePage、PageCount   和   PageSize   属性范例  
  该范例使用   AbsolutePage、PageCount   和   PageSize   属性,以每次五个记录的方式显示雇员表中的姓名和受雇日期。   
   

ExpandedBlockStart.gif ContractedBlock.gif   Public     Sub AbsolutePageX() Sub   AbsolutePageX()   
InBlock.gif          
InBlock.gif        
Dim   rstEmployees   As   ADODB.Recordset   
InBlock.gif        
Dim   strCnn   As   String   
InBlock.gif        
Dim   strMessage   As   String   
InBlock.gif        
Dim   intPage   As   Integer   
InBlock.gif        
Dim   intPageCount   As   Integer   
InBlock.gif        
Dim   intRecord   As   Integer   
InBlock.gif    
InBlock.gif        
'   使用客户端游标为雇员表打开一个记录集。   
InBlock.gif
        strCnn   =   "Provider=sqloledb;"   &   _   
InBlock.gif              
"Data   Source=srv;Initial   Catalog=pubs;User   Id=sa;Password=;   "   
InBlock.gif        
Set   rstEmployees   =   New   ADODB.Recordset   
InBlock.gif        
'   使用客户端游标激活   AbsolutePosition   属性。   
InBlock.gif
        rstEmployees.CursorLocation   =   adUseClient   
InBlock.gif        rstEmployees.Open   
"employee",   strCnn,   ,   ,   adCmdTable   
InBlock.gif          
InBlock.gif        
'   显示姓名和受雇日期,每次五个记录。   
InBlock.gif
        rstEmployees.PageSize   =   5   
InBlock.gif        intPageCount   
=   rstEmployees.PageCount   
InBlock.gif        
For   intPage   =   1   To   intPageCount   
InBlock.gif              rstEmployees.AbsolutePage   
=   intPage   
InBlock.gif              strMessage   
=   ""   
InBlock.gif              
For   intRecord   =   1   To   rstEmployees.PageSize   
InBlock.gif                    strMessage   
=   strMessage   &   _   
InBlock.gif                          rstEmployees!fname   
&   "   "   &   _     
InBlock.gif                          rstEmployees!lname   
&   "   "   &   _     
InBlock.gif                          rstEmployees!hire_date   
&   vbCr   
InBlock.gif                    rstEmployees.MoveNext   
InBlock.gif                    
If   rstEmployees.EOF   Then   Exit   For   
InBlock.gif              
Next   intRecord   
InBlock.gif              
MsgBox   strMessage   
InBlock.gif        
Next   intPage   
InBlock.gif        rstEmployees.Close   
InBlock.gif    
ExpandedSubBlockStart.gifContractedSubBlock.gif  
End   Sub ()Sub   
InBlock.gif

AbsolutePage   属性   (ADO)  
                     
   
  指定当前记录所在的页。  
   
  设置和返回值  
   
  设置或返回从   1   到   Recordset   对象   (PageCount)   所含页数的长整型值,或者返回以下常量。  
   
  常量   说明    
  AdPosUnknown   Recordset   为空,当前位置未知,或者提供者不支持   AbsolutePage   属性。    
  AdPosBOF   当前记录指针位于   BOF(即   BOF   属性为   True)。    
  AdPosEOF   当前记录指针位于   EOF(即   EOF   属性为   True)。    
   
   
  说明  
   
  使用   AbsolutePage   属性可识别当前记录所在的页码。使用   PageSize   属性可将   Recordset   对象逻辑划分为一系列的页,每页的记录数等于   PageSize(最后一页除外,该页记录数较少)。提供者必须支持该属性的相应功能才能使用该属性。  
   
  与   AbsolutePosition   属性一样,AbsolutePage   从   1   开始并在当前记录为   Recordset   中的第一个记录时等于   1。设置该属性可移动到特定页的第一个记录。从   PageCount   属性中可获得总页数。  
   
  PageCount   属性   (ADO)  
                     
   
  指示   Recordset   对象包含的数据页数。  
   
  返回值  
   
  返回长整型值。  
   
  说明  
   
  使用   PageCount   属性可确定   Recordset   对象中数据的页数。“页”是大小等于   PageSize   属性设置的记录组。即使最后页不完整,由于记录数比   PageSize   值少,该页也会作为   PageCount   值中的附加页进行计数。如果   Recordset   对象不支持该属性,该值为   -1   以表明   PageCount   无法确定。  
   
  有关页的功能的详细信息,请参阅   PageSize   和   AbsolutePage   属性。  
   
  RecordCount   属性   (ADO)  
                     
   
  指示   Recordset   对象中记录的当前数目。  
   
  返回值  
   
  返回长整型值。  
   
  说明  
   
  使用   RecordCount   属性可确定   Recordset   对象中记录的数目。ADO   无法确定记录数时该属性返回   –1。读已关闭的   Recordset   上的   RecordCount   属性将产生错误。  
   
  如果   Recordset   对象支持近似定位或书签(即   Supports   (adApproxPosition)   或   Supports   (adBookmark)   各自返回   True),不管是否完全填充该值,该值将为   Recordset   中记录的精确数目。如果   Recordset   对象不支持近似定位,该属性可能由于必须对所有记录进行检索和计数以返回精确   RecordCount   值而严重消耗资源。  

SQL语句的实现

select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段

10 = 每页记录数

20 = (当前页 + 1) * 每页记录数

以上语句即可以实现分页,但是最后取出的结果排序是升序,如果需要结果集为降序(例如时间),则有两种方法可以处理

1.使用以下语句,但效率可能要降低一些

select * from 表名 b, (select top 10 主键字段,排序字段 from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a order by 排序字段 ) c where b.主键字段 = c.主键字段 order by c.排序字段 desc

2.在ado里处理,将记录集游标移到最后,然后前移

''以下为asp范例

set rsTemp = Server.CreateObject("adodb.recordset")

rsTemp.Open 语句,conn,1,1

rsTemp.MoveLast

for i = 1 to rsTemp.RecordCount

 '取值....

rsTemp.MovePrevious

next

经测试,以上分页方法比使用临时表分页速度还要快,并且简单易用


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值