怎么让msflexgrid分页?

ahsqwang 2009-05-26 04:08:16
我设置了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不知何解。希望高手指教!
...全文
248 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
abc_2004 2009-05-27
  • 打赏
  • 举报
回复
1楼的是SQL存储过程。
白发程序猿 2009-05-27
  • 打赏
  • 举报
回复
多看看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.Close

End Sub
lyserver 2009-05-26
  • 打赏
  • 举报
回复
既然如此,你可以不使用绑定,而是用代码将记录显示在表格中就可以了。
ahsqwang 2009-05-26
  • 打赏
  • 举报
回复
谢谢你写了这么多,不过你这是VB吗?我有点看不懂,我猜你的意思就是一次只提取一部分查询结果,按上、下页的时候实际又进行了一次查询,但是我还是想一次查询出来再分页,这样打印所有的查询结果也可以一次完成,不知道能不能实现,继续等其他高手解答,再次谢谢你的耐心解答。
lyserver 2009-05-26
  • 打赏
  • 举报
回复
你这是假分页,实际上所有的记录都被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

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧