我设置了rs.PageSize = 20,记录有21条,rs.RecordCount=21,rs.PageCount=2,但是所有的还是显示在一页上面,而且rs.AbsolutePage=-3,Access数据库的连接我放在一个公共模块里做了一个函数,按照网上的方法,在函数里设置rs.cursorlocation=3 
rs.open   strsql,conn,3,1 
rs.AbsolutePage总是等于-3,总结一下我的问题:1)查询结果理论上是分页了,但是在msflexgrid里不分页;2)rs.AbsolutePage=-3不知何解。希望高手指教!

解决方案 »

  1.   

    你这是假分页,实际上所有的记录都被RS读取了,所以msflexgrid显示了全部数据(详见网易学院的《ADO 存取数据库时如何分页显示》一文)。
    解决的办法是使用SQL语句或存储查询实现真正的分页后再显示,比如俺写的一个分页查询:
    CREATE PROCEDURE PROC_PAGINATION
    @查询日期 DATETIME,
    @查询条件 NVARCHAR(100),
    @分页大小 INT,
    @分页序号 INT
    AS
    DECLARE @strSQL NVARCHAR(1000) SET @strSQL='
    DECLARE @查询日期 DATETIME;
    SET @查询日期='+''''+CONVERT(VARCHAR(10),@查询日期,120)+''''+';
    SELECT
    A.机构名称 信用社,A.合同编号,B.客户名称,CONVERT(VARCHAR(10),B.借款日期,120) 借款日期,CONVERT(VARCHAR(10),B.到期日期,120) 到期日期,
    B.借款方式,CAST(B.借款利率 AS DECIMAL(6,3)) 利率,'+''''+'¥'+''''+'+CONVERT(NVARCHAR,B.借款金额,1) 借款金额,CONVERT(VARCHAR(10),B.清息日期,120) 最后清息日,
    CONVERT(VARCHAR(10),B.止息日期,120) 最后清息止,'+''''+'¥'+''''+'+CONVERT(NVARCHAR,B.借款余额,1) 结欠金额,B.会计科目 科目,B.五级分类 形态,
    B.审批人,B.经放人,B.清收人
    FROM
    (
    SELECT TOP '+CAST(@分页大小 AS NVARCHAR(10))+'
    A.机构代码,A.合同编号,B.机构名称,A.结帐日期
    FROM
    (
    SELECT TOP '+CAST(@分页大小*@分页序号 AS NVARCHAR(10))+'
    A.机构代码,A.合同编号,A.结帐日期
    FROM
    分户_借款合同_余额信息 A
    WHERE
    '+@查询条件+' AND 结帐日期=(SELECT MAX(结帐日期) FROM 分户_借款合同_结帐日期 WHERE 机构代码=A.机构代码 AND 合同编号=A.合同编号 AND 结帐日期<=@查询日期)
    ORDER BY
    A.机构代码,A.合同编号 ASC
    ) A
    INNER JOIN
    系统_机构信息 B
    ON
    B.机构代码=A.机构代码
    ORDER BY 
    A.机构代码,A.合同编号 DESC
    ) A
    INNER JOIN
    分户_借款合同_余额信息 B
    ON
    B.机构代码=A.机构代码 AND B.合同编号=A.合同编号 AND B.结帐日期=A.结帐日期 AND A.结帐日期 IS NOT NULL
    ORDER BY
    B.机构代码,B.合同编号
    '
    --PRINT @strSQL
    EXEC sp_executesql @strSQL
      

  2.   

    多看看MSDN
    给你一段MSDN上的代码
    虽然不是给msflexgrid用
    但可以参考一下Public Sub AbsolutePageX()
       
       Dim rstEmployees As ADODB.Recordset
       Dim strCnn As String
       Dim strMessage As String
       Dim intPage As Integer
       Dim intPageCount As Integer
       Dim intRecord As Integer   ' Open a recordset using a client cursor
       ' for the employee table.
       strCnn = "Provider=sqloledb;" & _
          "Data Source=srv;Initial Catalog=Pubs;User Id=sa;Password=; "
       Set rstEmployees = New ADODB.Recordset
       ' Use client cursor to enable AbsolutePosition property.
       rstEmployees.CursorLocation = adUseClient
       rstEmployees.Open "employee", strCnn, , , adCmdTable
       
       ' Display names and hire dates, five records
       ' at a time.
       rstEmployees.PageSize = 5
       intPageCount = rstEmployees.PageCount
       For intPage = 1 To intPageCount
          rstEmployees.AbsolutePage = intPage
          strMessage = ""
          For intRecord = 1 To rstEmployees.PageSize
             strMessage = strMessage & _
                rstEmployees!fname & " " & _ 
                rstEmployees!lname & " " & _ 
                rstEmployees!hire_date & vbCr
             rstEmployees.MoveNext
             If rstEmployees.EOF Then Exit For
          Next intRecord
          MsgBox strMessage
       Next intPage
       rstEmployees.CloseEnd Sub