clientdataset 有packetrecords属性,就是他了。

解决方案 »

  1.   

    这个很难处理,虽然clientdataset 有packetrecords属性,但不能排序,
    也极,不能有select * from YourTable order by的形式出现
      

  2.   

    如果这些数据不经常更新,可以通过savetofile保存在本地,程序以公文包方式运行
      

  3.   

    分页显示和三层结构没有太大的关系。
    1、一次全部取得所有数据到客户端的数据集,或者用公文包方式;然后自己写一段算法,大致就是 记录总数/需要分的页数 =  每页的记录数,再根据这些数字来操纵数据集中的数据显示。
    2、利用ADO的Recordset对象的PageSize、PageCount、AbsolutePage等属性可实现分页功能。
    3、支持Top N 功能的数据库可以选取某字段为索引,作为下一次用top n的
    条件。 select top 100 * from table_name
      

  4.   

    这里再转贴一篇:
    WEB数据库分页浏览的技巧  
    国防大学图书馆技术室 王渤【提要】本文讲述了ASP开发WEB数据库时,控制网络数据流量,进行分页浏览输出的方法,阐述了分页浏览使用的主要技术和手段,介绍了RECORDSET对象与分页显示有关的技术与基础,文章中以实例介绍了数据记录分页显示的关键技术,并给出了设计思想和具体程序设计。开发WEB数据库的查询时,为了限制网络流通量,通常会采用SQL(结构化查询语言)查询方式,在其条件子句中使用WHERE条件来筛选输出的记录。但是WHERE子句并不能完全限制用户在网上的查询范围,当查询条件范围较广时,必需要限制输出的数据总量,但上网者只能看到最前面的查询结果。
    如果既要控制数据流量,又要让用户浏览所有查询到的数据记录,最普遍最有效的方式是将所查询的全部结果数据进行分页处理,并能提供“上一页”、“下一页”、“第一页”、“最后一页”等功能,或者能够直接定位到某一页,让上网者能逐一浏览每一页的数据记录。一、 ADO的RECORDSET对象
    在作者的《再论ASP开发WEB数据库》一文中,介绍过ADO的各种属性和方法,其中RECORDSET对象是最常用的对象,首先通过以下语句建立RECORDSET对象:
    Set conn = Server.CreartObject ("ADODB.connection")
    Conn.open "DNS设置"
    '以上语句建立ADO联接
    Set rs = Server.CreatObject ("ADODB.Recordset")
    Rs.open Sql , Conn , adopenStatic
    '以上两条语句用于建立RECORDSET对象并打开数据库
    通常,我们使用RECORDSET对象的Excute方法打开数据表,如下语句所示:
    Set rs = conn.Excute ("SQL语句")
    但是使用RECORDSET对象的Excute方法打开数据对象是只能向前滚动的(Forword-Only),当我们读取此类数据记录时,能够调用的只有其MoveNext方法,只能一步步向前移动记录,这种方法不能完成分页显示的功能,因此使用以下方法打开数据记录集:
    rs.Open 数据表名或SQL语句,Connection对象,Recordset类型,锁定类型
    然后利用RECORDSET对象的“rs.AbsolutePage=n”来设置当前数据记录。二、 RECORDSET对象的OPEN函数
    OPEN函数使用中的参数中,“数据表名或SQL语句”,指具体的要使用的数据表名或者是SQL查询语句,“Connection对象”是一个已经打开的数据库对象,“Recordset类型”有以下四种设置值:
    RECORDSET类型设置值
    意义
    AdOpenForwordOnly (=0)
    只读,记录只能向前滚动
    AdOpenStatic (=3)
    只读,记录可以自由滚动
    AdOpenKeyset (=1)
    读写,记录可以自由滚动
    AdOpenDynamic (=2)
    读写,记录可以自由滚动 *
    *与上一条区别是该模式可以自动更新当前数据表的数据
    “锁定类型”的设置值有以下四种:
    锁定类型的设置值
    意义
    AdLockReadOnly (=1)
    打开只读的数据记录
    AdLockPressimistic (=2)
    悲观锁定
    AdLockOptimistic (=3)
    乐观锁定
    AdLockBatchOptimistic (=4)
    批次乐观锁定
    为了实现分页显示,在打开RECORDSET对象后,必须先设置PageSize属性(每页的数据记录条数),RECORDSET对象才能计算数据记录的总条数,如下语句设置每页大小为10行:
    rs.PageSize = 10
    则RECORDSET对象的PageCount属性将设为:
    ((记录总数-1)/10)+1 (页)
    设置rs.PageSize属性后,则可以通过对AbsolutePage属性的设置,将当前数据记录设置到某一页的第一条记录上,如下语句:
    rs. AbsolutePage = 3
    则当前记录则移动到第3页(每页为10行)的第一条记录上,因此输出某一页数据记录的程序如下:rs. AbsolutePage = Page 'Page为页码号
    For I=1 to rs.PageSize '输出本页的每条记录
    '些处输出数据记录
    rs.MoveNext '记录移动到下一条
    if rs.EOF then exit for '若是记录尾则退出输出,因为若是最后一页,则可以没有足够的数据输出。
    Next I三、 分页显示的技巧实例:显示任一页数据
    以下例程用于显示某一页的全部数据:
    Sub ShowOnePage( rs, Page )
    'rs为打开的数记录集,Page为要显示的页码
    Response.Write "<CENTER><TABLE BORDER=1>"
    Response.Write "<TR BGCOLOR=#00FFFF>"
    Response.WRITE "<TD>序号</TD>"
    For i=0 to rs.Fields.Count-1
    '输出表头名称
    Response.WRITE "<TD>" & rs.Fields(i).Name & "</TD>"
    Next
    Response.Write "</TR>"rs.AbsolutePage = Page '设置当前页号
    For iPage = 1 To rs.PageSize '输出当前页的所有记录
    Response.Write "<TR>"
    RecNo = (Page - 1) * rs.PageSize + iPage '计算输出的记录序号
    Response.Write "<TD>" & RecNo & "</TD>"
    For i=0 to rs.Fields.Count-1 '输出每一字段
    Response.WRITE "<TD>" & rs.Fields(i).Value & "</TD>"
    Next
    Response.Write "</TR>"
    rs.MoveNext
    If rs.EOF Then Exit For
    Next
    Response.Write "</TABLE></CENTER>" 
    End Sub四、 提供更具浏览性的网页
    上网者往往查询多达几十页资料数据,从用户角度考虑,应该提供更直观方便的页面,不妨提供以下功能以方便上网者:第一页 上一页 下一页 最后一页 输入页号: 总页数:ASP程序实现如下:
    '此处打开数据库联接及数据表对象
    <%
    If Request("Page") = "" Then Page=10
    Page = CLng(Request("Page")) ' CLng 不可省略,用于将页码转换为长整型
    If Page < 1 Then Page = 1
    If Page > rs.PageCount Then Page = rs.PageCount
    %>
    <html>
    <head>
    <meta http-equiv="Content-Type"
    content="text/html; charset=gb_2312-80">
    <meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
    <title>分页浏览数据库的技巧</title>
    </head><body bgcolor="#FFFFFF">
    <h2 align="center">利用SQL命令筛选数据记录</h2><hr>
    <%
    ShowOnePage rs, Page
    %>
    <hr><form action="当前文件.asp" method="GET">
    <% 
    If Page <> 1 Then
    Response.Write "<A HREF=PageS23.asp?Page=1>第一页</A>"
    Response.Write "<A HREF=PageS23.asp?Page=" & (Page-1) & ">上一页</A>"
    End If
    If Page <> rs.PageCount Then
    Response.Write "<A HREF=PageS23.asp?Page=" & (Page+1) & ">下一页</A>"
    Response.Write "<A HREF=PageS23.asp?Page=" & rs.PageCount & ">最后一页</A>"
    End If
    %> <p align="right">输入页数:<input type="text" size="3"
    name="Page"> 页数:<font color="#FF0000"><%=Page%>/<%=rs.PageCount%></font> </p>
    </form>
    </body>
    </html>
      

  5.   

    to 无人喝彩:
     数据需要更新.且数据量很大.比如10万条以上.如果保存到客户端.比较困难.且这些数据都可能随时更新.比如用户信息.
      直接用select top 100 * from tablename ,也不能满足要求.
      能不能再详细点.我还是不明白如何处理这样的数据
      

  6.   

    可以通过packetrecords控制客户一次只取若干记录,采用无状态对象,在客户端维护cursor
    详情见李维系统篇
      

  7.   

    分页显示和三层结构没有太大的关系。
    1、一次全部取得所有数据到客户端的数据集,或者用公文包方式;然后自己写一段算法,大致就是 记录总数/需要分的页数 =  每页的记录数,再根据这些数字来操纵数据集中的数据显示。
    2、利用ADO的Recordset对象的PageSize、PageCount、AbsolutePage等属性可实现分页功能。
    3、支持Top N 功能的数据库可以选取某字段为索引,作为下一次用top n的
    条件。 select top 100 * from table_name