vfp怎么分页显示数据?

yeyuanzhi2000 2010-04-09 06:24:10
我在网上看到一个高手发的贴,说vfp很容易做分页,但怎么做没说,原贴如下:
现在最流行的显示方式就是分页显示了,在vs中datagridview控件支持分页显示。分页显示的实质就是将用户请求的数据通过技术手段分成若干的段,当用户跳转到相应的页面时,才呈现相应的数据;这样的好处是:对于一些大的数据,通过分散显示的方式(实际也是分散查询),让用户体会不到数据查询的缓慢。
分页技术的实现实际就是查询技术的分解
1、首先要统计记录总数
2、根据记录数、每页记录数算出总页数
3、根据页码查询相应的记录数,任意页则根据recn()函数确定记录范围

总之,VFP天生为数据而生,操作数据比VS强,做分页很拿手

请问怎么做呢?有没有这方面的源码下载?谢谢!!
...全文
630 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
bhrs2011 2011-10-24
  • 打赏
  • 举报
回复
上面打错字了
能把实例发一个给我吗?不胜感激~ 349489538@qq.com
bhrs2011 2011-10-24
  • 打赏
  • 举报
回复
能把实力发一个给我吗?不胜感激~ 349489538@qq.com
wcctyt 2011-06-06
  • 打赏
  • 举报
回复
能把实例发一个给我吗,我也学习一下,WCCTYT@163.COM
csdawwwwww 2010-05-10
  • 打赏
  • 举报
回复
能把实例发一个给我吗,我也学习一下,26795864@qq.com
ll1429370173 2010-05-02
  • 打赏
  • 举报
回复
能把实例发一个给我吗,我也学习一下,1018599824@qq.com
狂龙骄子 2010-04-27
  • 打赏
  • 举报
回复
VFP6的可以将 as String 删除即可,不影响,只要您使用时记录这个是字符串就可以啦。
yeyuanzhi2000 2010-04-27
  • 打赏
  • 举报
回复
谢谢,我用的是VFP6,运行到Lparameters lstrPointer_Pos as String有问题哦?
yeyuanzhi2000 2010-04-26
  • 打赏
  • 举报
回复
我的邮箱是yeyuanzhi2000@yahoo.com.cn 谢谢!!
都市夜猫 2010-04-26
  • 打赏
  • 举报
回复
不错!界面设计很规范
狂龙骄子 2010-04-25
  • 打赏
  • 举报
回复
每页显示10条记录

每页显示20条记录
狂龙骄子 2010-04-25
  • 打赏
  • 举报
回复
我已实例的截图上传我的相册,压缩包上传不了。
在我邮箱里,如有需要,请给我邮件:Dragonborn2010@163.com

《VFP 9.0用Grid控件实现查询结果的分页显示》
http://hi.csdn.net/space-4978794-do-album-id-35919.html

[Quote=引用 4 楼 sn_keys 的回复:]
留下E-mail,回头将实例发给你吧~~~
[/Quote]
yeyuanzhi2000 2010-04-19
  • 打赏
  • 举报
回复
翻了一页,再往后翻就不行了。
十豆三 2010-04-17
  • 打赏
  • 举报
回复
用 Grid 分页显示
注:如果表有索引,显示的顺序为索引顺序而不是物理顺序

在表单加一个 Grid 控件
在表单加一个按钮:如其 Name 为 Command100 (或用表单方法也可以),其 Visible 属为 .F.,其 Click 事件代码为:
Thisform.Grid1.recordsource=Null
Thisform.Grid1.ColumnCount=-1
Select Recno() As jlh,* Into Cursor T2 From "&gnTableName." Where Between(Recno(),gnPageRows*gnPage-(gnPageRows-1),gnPageRows*gnPage) Order By 1
Thisform.Grid1.recordsource="T2"
Thisform.Grid1.DeleteColumn(1) && 如果是VFP6,此句改为:Thisform.Grid1.Columns(1).Width=0
Thisform.Grid1.Refresh


在表单的 Load 事件加代码:
Public gnPage,gnPageRows,gnTableName
*--- 生成测试数据
Create Cursor T1 (ID I,Name C(10),Department C(20))
For m.lnI=1 To 23
Insert Into T1 Values (m.lnI,"XM"+Transform(m.lnI),"BM"+Transform(m.lnI))
Endfor
*---
gnPage=1 && 初始1 表示第一页
gnPageRows=5 && 每页显示记录数
gnTableName="T1" && 分页显示记录的表名


在表单的 Unload 事件加代码:
Release gnPage,gnPageRows,gnTableName


在表单的 Init 事件加代码:
This.Command100.Click()


上一页按钮 的 Click 事件代码:
gnPage=Max(gnPage-1,1)
Thisform.Command100.Click()


下一页按钮 的 Click 事件代码:
gnPage=Min(gnPage+1,Ceiling(Reccount(gnTableName)/gnPageRows))
Thisform.Command100.Click()
十豆三 2010-04-17
  • 打赏
  • 举报
回复
这个帖子中的功能实际就是分页,每页3条,只不过此帖不用 Grid 显示,用 Label 显示

http://topic.csdn.net/u/20100324/18/d1535511-99fa-4887-8ecf-aafec5cb2f07.html?62904
狂龙骄子 2010-04-16
  • 打赏
  • 举报
回复
明天分析下,给您回复……
yeyuanzhi2000 2010-04-16
  • 打赏
  • 举报
回复
这是VB的分页源码
Dim AdoCnn As New ADODB.Connection
Dim PageNow As Long
Dim PageMax As Long

Private Sub Command2_Click()

If PageNow < PageMax Then
PageNow = PageNow + 1
Call MSFGPullFY(MSFG, "select * from rooms", 5, PageNow)
Label1.Caption = "共" & PageMax & "页 当前是第 " & PageNow & " 页"
Else
MsgBox "超出范围"
End If
End Sub

Private Sub Command3_Click()
If PageNow > 1 Then
PageNow = PageNow - 1
Call MSFGPullFY(MSFG, "select * from rooms", 5, PageNow)
Label1.Caption = "共" & PageMax & "页 当前是第 " & PageNow & " 页"
Else
MsgBox "超出范围"
End If

End Sub

Private Sub Command4_Click()
PageNow = PageMax
Call MSFGPullFY(MSFG, "select * from rooms", 5, PageNow)
Label1.Caption = "共" & PageMax & "页 当前是第 " & PageNow & " 页"
End Sub

Private Sub Command5_Click()
PageNow = 1
Call MSFGPullFY(MSFG, "select * from rooms", 5, PageNow)
Label1.Caption = "共" & PageMax & "页 当前是第 " & PageNow & " 页"
End Sub

Private Sub Form_Load()
' On Error GoTo ConnectErr '错误捕捉

Sqluse = "admin"
SqlPwd = "fw"
SqlSre = App.Path & "\Mydb.mdb"
AdoCnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=" & SqlPwd & ";Data Source=" & SqlSre
'设置超时参数
AdoCnn.ConnectionTimeout = 20
AdoCnn.Open

Call MSFGPullFY(MSFG, "select * from rooms", 5, 1)
PageNow = 1
Label1.Caption = "共" & PageMax & "页 当前是第 " & PageNow & " 页"
ConnectErr:

End Sub


'填充指定表单的内容MSFlexG表单名称,MYSQL查询语句,PageSize每页记录数,PageN显示指定页
Public Function MSFGPullFY(MSFlexG As MSFlexGrid, MYSQL As String, PageSize As Integer, PageN As Long)
BooNull = False
Dim Tmpi, Tmpj As Long
'以下部分进行数据表打开操作===========================================
Dim tmpRs As ADODB.Recordset
Set tmpRs = New ADODB.Recordset
tmpRs.Open MYSQL, AdoCnn, adOpenKeyset, adLockReadOnly, adCmdText
'=====================================================================

'如果数据不为空,则进行读取操作=======================================
'数据显示窗口的行数等于记录集记录数加上固定1行(数据名)==============
'数据显示窗口的列数等于记录集表的数据项个数减去需要隐藏的数据项=======
'(固定行默认是记录集中第一个字段)===================================
If tmpRs.BOF And tmpRs.EOF Then
' MsgBox "数据库中无符合条件的记录", , "提示"
MSFlexG.Clear
MSFlexG.Rows = 2
MSFlexG.Cols = 2
Else
tmpRs.PageSize = PageSize
PageMax = tmpRs.PageCount
tmpRs.MoveLast
tmpRs.MoveFirst
MSFlexG.Rows = tmpRs.PageSize + 1
MSFlexG.Cols = tmpRs.PageSize + 1
' If tmpRs.RecordCount > 3000 Then MsgBox "读取数据量较大,请耐心等待", , "提示"
tmpRs.AbsolutePage = PageN
For Tmpi = 1 To tmpRs.PageSize
MSFlexG.TextMatrix(Tmpi, 0) = Str(Tmpi)
For Tmpj = 1 To tmpRs.Fields.Count
If IsNull(Trim(tmpRs.Fields(Tmpj - 1).Value)) Then '控制填充内容不能为空
MSFlexG.TextMatrix(Tmpi, Tmpj) = ""
Else
MSFlexG.TextMatrix(Tmpi, Tmpj) = Trim(tmpRs.Fields(Tmpj - 1).Value)
End If
Next Tmpj
tmpRs.MoveNext
Next Tmpi
tmpRs.Close
Set tmpRs = Nothing
End If
'=====================================================================

MSFlexG.Refresh
End Function

怎么把它修改成VFP的分页源码?谢谢!!
狂龙骄子 2010-04-16
  • 打赏
  • 举报
回复
留下E-mail,回头将实例发给你吧~~~
yeyuanzhi2000 2010-04-16
  • 打赏
  • 举报
回复
不行啊
狂龙骄子 2010-04-10
  • 打赏
  • 举报
回复
*Grid控件这段更新~~

*将该代码添加到一个按钮(或其它控件中),并设置Grid控件的Init事件:
With thisform.Grid_Result
.RecordSourceType = 1 &&别名
.RecordSource = "c_Split_Result"
.Refresh
Endwith
狂龙骄子 2010-04-10
  • 打赏
  • 举报
回复
*-------------------------声明--------------------Start*
*环境:VFP 8.0
*作者:狂龙娇子(QQ:403108320)
*日期:2010-04-10
*说明:如果引用,请说明转载来源
*-------------------------声明--------------------End*

*以下已经过测试,可以正常使用:

*----------这里自已指定----------Start
Close Tables
Use "E:\临时表.dbf" In 0 Alias t_Source_Table
*----------这里自已指定----------End

*假如通过统计获得了总需要显示的记录数
Local liDisplay_Rec_Cnt as Integer
liDisplay_Rec_Cnt = Reccount("t_Source_Table")

*----------以下分页显示代码----------Start
Local liSplit_Cnt as Integer &&每页显示的记录条数
Local liCur_Page as Integer &&需要显示的页号

Local liStart_Recno as Integer &&显示结果的起始记录
Local liEnd_Recno as Integer &&显示结果的结束记录

liSplit_Cnt = 5 &&每页显示5条记录
liCur_Page = 3 &&显示第3页(可由用户指定):即从记录号为11~15 的记录。

liStart_Recno = liSplit_Cnt * (liCur_Page -1)
liEnd_Recno = liSplit_Cnt * liCur_Page

*分页显示,将结果输出到临时表(游标中):根据需要,列出显示的字段名
Select st.* from t_Source_Table as st where Recno() > liStart_Recno and liEnd_Recno >= Recno() into cursor c_Split_Result

Select c_Split_Result
Browse
*----------以下分页显示代码----------End

*将该代码添加到一个按钮(或其它控件中),并设置Grid控件的Init事件:
With thisform.Grid_Result
RecordSourceType = 1 &&别名
.RecordSource = "c_Split_Result"
.Refresh
Endwith
Grid++Report是一款C/S与B/S集成报表工具,功能全面易学易用。C/S开发适用于VB.NET,C#,VB,VC,Delphi,BCB,VFP,易语言等。B/S开发适用于ASP.NET,ASP,PHP,JSP等,支持所有WEB服务器。 Grid++Report6.0版主要新增功能 ★引擎方面 1、增加了一个自由表格部件,可以灵活定义各种自由表格,具有单元格合并功能。 2、部件框增加边距设置,边框增加内层与阴影,虚线边框。 3、文字显示增加段间距、首字缩进与两端分散对齐。 4、分组报表可以按某个统计值的大小对分组项进行排序 5、数据源除了OLE DB外,增加XML、JSON与普通文本数据。 6、在编程接口中增加了很多应用函数,如数据压缩、数字格式化、日期时间解析与格式化、打印机与纸型枚举、文件选择对话框等。 7、其它杂项功能,根据多年收集的用户需求来增加与改进功能,如分组相关系统变量、图像旋转显示等。 ★设计器: 1、设计面板具有缩放设计功能。 2、将关联属性归类为组,方便在设计时集中设置与查看。 3、对象浏览窗口与属性窗口可以隐藏,方便在设计很宽的报表时增大设计面板的区域。 4、设计面板大小跟随明细网格总列宽来改变宽度,方便设计大宽度明细网格报表。 5、部件框锁定功能,被锁定的部件框不允许进行可视化拖放。 6、自动在分组头尾中增加统计框,默认为合计函数,并设置相应的对齐列。 7、数据源连接串可以为 XML 或 JSON 数据源,且可以自动生成字段。设计报表时数据源可连接的类型有:各种数据库、XML或JSON文件、产生XML或JSON的网络URL、EXCEL文件、TEXT文件。 8、设计器增加数据提供事件接口,在设计报表时可以用给报表加载自定义数据源。 ★打印与打印预览: 1、横向分页时,在数据不多的情况下,分页直接显示在本页,而不是在下一页。 2、在模板中可以保存默认打印机名称。 3、分组尾支持每页重复打印。 4、如果部件框跨页多次显示了,在新页中再次输出其上下边框。 5、提供编程接口枚举出Windows系统中安装的打印机,以及指定打印机支持的所有纸张类型。 ★查询显示: 1、没有明细网格的报表,背景图可以显示出来。 2、明细数据不多时,表格不会显示下部空白。 ★数据导出: 1、在导出Excel时,能用代码设置页边距等参数 2、在运行时对外观属性的改变可以反映到Excel导出。 ★图表: 1、重新设计图表接口,让图表可视化设计与编程控制更清晰简单。 2、支持更多图表类型,如百分比柱状图、垂直排列的柱图。 3、一个图表中可以混和显示多种不同类型的图形,如一个序列为柱图,另一个序列为曲线图。 4、Y轴可以显示双坐标轴,方便实现双轴柱状图等。 5、图例可以在下方显示,可以多栏显示。 6、增加图表数据记录集,图表数据直接从记录集或XML数据源加载,而不需用代码来加载图表数据。 7、图表方面还有很多细节方面的改进与增强,加强图表功能是本新版本的重要方面。 ★交叉表 1、多数据列交叉表可以将同一列产生的交叉列排列在一起。 2、在合计列中可以排除掉一些列不进行合计。 3、纵向交叉项目列中可以定义统计框或综合文字框表达式,在合计列中关联的字段自动求和,在项目列中关联字段为复制首笔值。 ★子报表: 1、子报表无数据可以自动隐藏。

2,723

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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