我在FORM上有下一页按钮,我要点击此按钮时将查询出的前两个数据传到另一个函数中来新打开此页,我是要点击按钮时打开一页,还有数据时再点击下一页按钮再打开一页,请高手指点一下。
例如:假设我现在打开了FORM1,我点击页面上的下一页按钮时,我还是打开FORM1页,但是数据是另外的两条,再点击下一页按钮时我还是要打开FORM1页但是数据又是另外的两条,一直到没有数据,然后将下一页按钮的Enabled属性设为Flase.我在下一页按钮中的代码为:(但这时是同时打开了几页,我是要点击按钮时打开一页,还有数据时再点击下一页按钮再打开一页)
Private Sub Cmd下一页_Click()
    dim rs as new dbrecordset
    dim rs2 as new dbrecordset
    dim a as long
    dim b as integer
    dim b as integer
    
    rs.open"SELECT COUNT(*) FORM DA WHERE ZH=" & Lblzh
    
    IF rs(0)>2 then
       rs2.open"SELECT ZH,YH FROM DA WHERE ZH=" & Lblzh & " ORDER BY YH"
       rs2.movenext
       rs2.movenext
       a=rs2("zh")
       b=rs2("yh")
       rs2.movenext
       if not rs2.eof then
          c=rs2("yh")
       else
          c=0
       end if
       call show(a,b,c)    '将数据写入页面
       
       rs.movefirst
       rs2.movenext
       rs2.movenext
       rs2.movenext
       rs2.movenext
       if not rs2.eof then
          a=rs2("zh")
          b=rs2("yh")
       end if
       rs2.movenext
       if not rs2.eof then
          c=rs2("yh")
       else
          c=0
       end if
       call show(a,b,c)       ......   else
       Cmd下一页.enabled=false
   end if
   rs.close
   rs2.close
end sub

解决方案 »

  1.   

    '写了一个,应为datagrid是绑定记录集的
    '所以采用了间接的办法,定义另一个记录集objrs,将分页后的记录集付给objrs.
    '效果还不错 , 我加了详细地注释?像pagesize, AbsolutePage的用法可参考msdn
    '引用ado2 0.6
    Option Explicit
    Dim conn As ADODB.Connection
    Dim lCurrentPage As LongPrivate Sub cmdNext_Click()
        lCurrentPage = lCurrentPage + 1
        Call Loadcontrol(lCurrentPage)
    End SubPrivate Sub cmdPrevious_Click()
        If lCurrentPage > 1 Then
            lCurrentPage = lCurrentPage - 1
            Call Loadcontrol(lCurrentPage)
        End If
    End SubPrivate Sub Form_Load()
        
        Set conn = New ADODB.Connection
        conn.CursorLocation = adUseClient
        conn.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\test2000.mdb;"    lCurrentPage = 1
        Call Loadcontrol(lCurrentPage)End Sub
    Private Sub Loadcontrol(lPage As Long)
        Dim adoPrimaryRS As ADODB.Recordset
        Dim lPageCount As Long
        Dim nPageSize As Integer
        Dim lCount As Long
        
        '每页显示的纪录
        nPageSize = 10
        Set adoPrimaryRS = New ADODB.Recordset
        adoPrimaryRS.Open "select * from numbers", conn, adOpenStatic, adLockOptimistic    adoPrimaryRS.PageSize = nPageSize
        '页数
        lPageCount = adoPrimaryRS.PageCount
        If lCurrentPage > lPageCount Then
            lCurrentPage = lPageCount
        End If
        
        adoPrimaryRS.AbsolutePage = lCurrentPage
        '定义另一个记录集
        Dim objrs As New ADODB.Recordset
        '添加字段名称
        For lCount = 0 To adoPrimaryRS.Fields.Count - 1
            objrs.Fields.Append adoPrimaryRS.Fields(lCount).Name, adVarChar, adoPrimaryRS.Fields(lCount).DefinedSize
        Next
        '打开记录集
        objrs.Open
        '将指定记录数循环添加到objrs中
        For lCount = 1 To nPageSize
            objrs.AddNew
            objrs!id = adoPrimaryRS!id
            objrs!anumber = adoPrimaryRS!anumber
            adoPrimaryRS.MoveNext
        Next
        '绑定
        Set DataGrid1.DataSource = objrs
        
        '显示页数
        txtPage = lPage & "/" & adoPrimaryRS.PageCount
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        If Not conn Is Nothing Then
            conn.Close
        End If
        Set conn = Nothing
    End SubPrivate Sub txtPage_KeyDown(KeyCode As Integer, Shift As Integer)
        lCurrentPage = Val(txtPage.Text)
        Call Loadcontrol(lCurrentPage)
    End Sub
      

  2.   

    谢谢online(龙卷风V2.0--再战江湖)我看了好就还是没怎么看明白你的代码
    怎么我用pagesize就是不行呢,你的这句代码是什么意思:
    If lCurrentPage > lPageCount Then
       lCurrentPage = lPageCount
    End If
    我原也想是算出页数,就是:
    rs.open"SELECT COUNT(*) FORM DA WHERE ZH=" & Lblzh
    然后用rs(0)/2,可是有可能有余数。
      

  3.   

    谢谢online(龙卷风V2.0--再战江湖)还有你的这个txtpage是什么呀?
    Private Sub txtPage_KeyDown(KeyCode As Integer, Shift As Integer)
        lCurrentPage = Val(txtPage.Text)
        Call Loadcontrol(lCurrentPage)
    End Sub
      

  4.   

    If lCurrentPage > lPageCount Then
       lCurrentPage = lPageCount
    End If
    如果当前页大于总页数txtpage是一个文本框,直接输入页数,回车就可以跳转到指定页面如果你做过asp的分页,就比较熟悉了
      

  5.   

    谢谢online(龙卷风V2.0--再战江湖)
    我现在还是刚接触VB,你告诉我的方法是用ASP.NET,
    能不能教我算出页数,就是:
    rs.open"SELECT COUNT(*) FORM DA WHERE ZH=" & Lblzh
    然后用rs(0)/2,如果有有小数就整数加1,比如等于2.5则
    是3页,则在点击下一页按钮时判断是第几页然后再传值。
      

  6.   

    我告诉你的方法是vb的,只是说如果你会asp,会加深理解
    我已经给你写了啊
    lPageCount = adoPrimaryRS.PageCount‘得到的就是页数阿你的方法就不要用了。然后用rs(0)/2,如果有有小数就整数加1
    因为得到的结果只能是1,1.5,2,2.5
    自己用int(2.5)+1处理
      

  7.   

    可是为什么我这样用却通不过呢?
    adoPrimaryRS.PageSize = nPageSize
    lPageCount = adoPrimaryRS.PageCount
      

  8.   

    adoPrimaryRS.PageSize = nPageSize
    adoPrimaryRS.CacheSize = adoPrimaryRS.PageSize ‘加载内存中显示的记录数
    adoPrimaryRS.Open strSql, Conn, 3
    这要应当可以啊!
      

  9.   

    我把代码发给你慢慢看吧
    给我发mail
    [email protected]