关于ACCESS快速分页的补充!

原创 2004年09月08日 11:21:00

前天看了编datagrid access分页的文章,很不错,但只提到用主键分页,本人整理了一下,写了个通用的分页方法,大家可以参考一下,有什么问题请指出,如下:

 

public class FastPageSql
 {
  private int allCount; //表中记录总数
  private bool isDesc; //排序方式
  private string primaryKey; //表的主键
  private string orderKey; //排序键
  private string selectFields; //要选择的字段
  private string queryCondition; //筛选条件
  private string tableName; //表名称
  private int perPageCount; //每页显示数
  private int pageIndex;  //显示页的索引
  private int totalIndex;     //总页数
  private int middleIndex; //中间页数;

  public FastPageSql(int allcount,bool isdesc,string primarykey,string orderkey,string tablename,int perpagecount,int pageindex,string selectfields,string querycondition)
  {
   allCount=allcount;
   isDesc=isdesc;
   primaryKey=primarykey;
   orderKey=orderkey;
   selectFields=selectfields;
   queryCondition=querycondition;
   tableName=tablename;
   perPageCount=perpagecount;
   pageIndex=pageindex;
   totalIndex=getTotalIndex();
   middleIndex=(int)(totalIndex/2);
  }
  private int getTotalIndex()
  {
   if(allCount%perPageCount>0)
    return (int)(allCount/perPageCount)+1;
   else
    return allCount/perPageCount;

  }
  public string GetFastPageSql()
  {
   string sql="";
   if(pageIndex<=1)
   {
    #region 第一页代码
    sql="select top "+perPageCount+" "+selectFields+" from "+tableName+" "+((queryCondition!="")?"where "+queryCondition+"":"")+" order by "+orderKey+" "+((isDesc)?"desc":"asc")+"";
    #endregion
   }
   else if(1   {
    #region 中间页之前
    if(primaryKey==orderKey)
     sql="select top "+perPageCount+" "+selectFields+" from "+tableName+" where "+primaryKey+""+((isDesc)?"<":">")+"(select "+((isDesc)?"min":"max")+"("+primaryKey+") from(select top "+perPageCount*(pageIndex-1)+" "+primaryKey+" from "+tableName+" "+((queryCondition!="")?"where "+queryCondition+"":"")+" order by "+orderKey+" "+((isDesc)?"desc":"asc")+" )) "+((queryCondition!="")?"and "+queryCondition+"":"")+" order by "+orderKey+" "+((isDesc)?"desc":"asc")+"";
    else
     sql="select "+selectFields+" from (select top "+perPageCount+" "+selectFields+" from (select top "+perPageCount*pageIndex+" "+selectFields+" from "+tableName+" "+((queryCondition!="")?"where "+queryCondition+"":"")+" order by "+orderKey+" "+((isDesc)?"desc":"asc")+") order by "+orderKey+" "+((isDesc)?"asc":"desc")+") order by "+orderKey+" "+((isDesc)?"desc":"asc")+"";
    #endregion

   }
   else if(middleIndex   {
    #region 中间页到最后页之间
    if(primaryKey==orderKey)
     sql="select "+selectFields+" from (select top "+perPageCount+" "+selectFields+" from "+tableName+" where "+primaryKey+""+((isDesc)?">":"<")+"(select "+((isDesc)?"max":"min")+"("+primaryKey+") from (select top "+(allCount-perPageCount*pageIndex)+" "+primaryKey+" from "+tableName+" "+((queryCondition!="")?"where "+queryCondition+"":"")+" order by "+orderKey+" "+((isDesc)?"asc":"desc")+" )) "+((queryCondition!="")?"and "+queryCondition+"":"")+" order by "+orderKey+" "+((isDesc)?"asc":"desc")+") order by "+orderKey+" "+((isDesc)?"desc":"asc")+"";
    else
     sql="select top "+perPageCount+" "+selectFields+" from (select top "+(allCount-(pageIndex-1)*perPageCount)+" "+selectFields+" from "+tableName+" "+((queryCondition!="")?"where "+queryCondition+"":"")+" order by "+orderKey+" "+((isDesc)?"asc":"desc")+") order by "+orderKey+" "+((isDesc)?"desc":"asc")+"";

    #endregion


   }
   else if(pageIndex>=totalIndex)
   {
    #region 最后页
    sql="select "+selectFields+" from (select top "+(allCount-(totalIndex-1)*perPageCount)+" "+selectFields+" from "+tableName+" "+((queryCondition!="")?"where "+queryCondition+"":"")+" order by "+orderKey+" "+((isDesc)?"asc":"desc")+") order by "+orderKey+" "+((isDesc)?"desc":"asc")+"";
    #endregion

   }
   return sql;
  }
  }

 

返回的sql语句将只选择当前页所需要的记录,程序中直接填充到DataSet中显示即可!

 

 

高效率的Access\MSSQL分页的SQL语句

采用Access数据库有许多优点,比如数据库无须专门的数据库空间,使用,备份,迁移也非常方便。 但一旦数据量到达上万条,上十万条甚至更多的时候,ACCESS的大数据量的列表分页效率问题就出现了。 ...
  • qq269228887
  • qq269228887
  • 2013年10月31日 11:49
  • 704

PLSQL使用技巧(持续补充...)

工欲善其事,必先利其器,PLSQL使用技巧(持续补充...) 1、PL/SQL Developer记住登陆密码    在使用PL/SQL Developer时,为了工作方便希望PL/SQL D...
  • DPC27149
  • DPC27149
  • 2014年11月22日 14:39
  • 571

Access分页查询-双Top方式

namespace Eternal.Util {     ///     /// Access分页帮助类     ///     public static class AccessPagi...
  • xuweisen
  • xuweisen
  • 2013年12月12日 20:44
  • 952

排序算法之快速排序

快速排序算法基本思想、实现、分析和优化策略...
  • whucyl
  • whucyl
  • 2013年11月06日 20:25
  • 1346

ACCESS高效分页

由于Access数据库内没有存储过程一说. 那么实现它的分页上效率问题一直都是麻烦事..下面一段代码,相当来说算了很高效的了. 如果有什么更好的方法,请多指教! 谢谢! 调用方法 stri...
  • hxkjnet360
  • hxkjnet360
  • 2017年11月22日 12:44
  • 31

Access分页查询

由于Access数据库内没有存储过程一说. 那么实现它的分页上效率问题一直都是麻烦事..下面一段代码,相当来说算了很高效的了. 如果有什么更好的方法,请多指教! 谢谢! 调用方法  程序代...
  • wzcool273509239
  • wzcool273509239
  • 2014年11月27日 22:59
  • 335

ACCESS高效分页

由于Access数据库内没有存储过程一说. 那么实现它的分页上效率问题一直都是麻烦事..下面一段代码,相当来说算了很高效的了. 如果有什么更好的方法,请多指教! 谢谢! 调用方法: strin...
  • kyleing
  • kyleing
  • 2013年05月16日 17:58
  • 419

需求用例分析之三:补充规约

补充规约在RUP中是记录那些在用例模型的用例中不容易体现出来的系统需求。这些需求包括:  § 法律法规方面的需求和应用标准。§ 要建立的系统质量属性,包括可用性需求、可靠性需求、性能需求和可支持性...
  • zhangmike
  • zhangmike
  • 2014年05月18日 20:26
  • 2756

降低UIScrollView快速滑动后滚动的速度

UIScrollView 快速滑动过程中,滚动速度过快,可以通过属性decelerationRate控制。 decelerationRate范围为0-----1,一般0---0....
  • abc4715760
  • abc4715760
  • 2014年11月26日 23:27
  • 1181

Access数据库从入门到进门——应用篇

Access数据库自身提供了非常强大的VBA编程,可以很方便的开发小型软件,具体的使用方法请查阅相关资料。但是,对于我们而言,在软件开发过程中,都采用三层架构的开发方法,使用不同的编程语言,所以,遇到...
  • why15732625998
  • why15732625998
  • 2016年04月27日 21:01
  • 1315
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于ACCESS快速分页的补充!
举报原因:
原因补充:

(最多只允许输入30个字)