我在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
例如:假设我现在打开了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
解决方案 »
- 不想用MSFLEXGRID的垂直滚动条,只想通来2个button按钮来实现数据的上下滚动,请问各路高手有什么好办法。
- VB模块代码求助???
- 数据格式化问题
- 时间区间判定,比如startDate = "2008-08-04 14:17:55",如何判定他处于“13:50-14:30”之间
- 老问题,vs2005自带水晶报表的access数据库相对路径问题,动态连接数据库,搞掂速结贴
- 我用input来输入汉字,怎吗输入的都变成了一些乱码???
- 如何使用Printer对象和PictureBox来做分页预览
- 有关vb中值和引用的传递的问题
- 数据库问题:有什么简单的办法可以实现把临近的两行数据进行交换?
- 100分求解:--小问题--
- 高手解决问题:什么方法是最好的(显示记录)
- 关于VB中数据库的问题
'所以采用了间接的办法,定义另一个记录集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
怎么我用pagesize就是不行呢,你的这句代码是什么意思:
If lCurrentPage > lPageCount Then
lCurrentPage = lPageCount
End If
我原也想是算出页数,就是:
rs.open"SELECT COUNT(*) FORM DA WHERE ZH=" & Lblzh
然后用rs(0)/2,可是有可能有余数。
Private Sub txtPage_KeyDown(KeyCode As Integer, Shift As Integer)
lCurrentPage = Val(txtPage.Text)
Call Loadcontrol(lCurrentPage)
End Sub
lCurrentPage = lPageCount
End If
如果当前页大于总页数txtpage是一个文本框,直接输入页数,回车就可以跳转到指定页面如果你做过asp的分页,就比较熟悉了
我现在还是刚接触VB,你告诉我的方法是用ASP.NET,
能不能教我算出页数,就是:
rs.open"SELECT COUNT(*) FORM DA WHERE ZH=" & Lblzh
然后用rs(0)/2,如果有有小数就整数加1,比如等于2.5则
是3页,则在点击下一页按钮时判断是第几页然后再传值。
我已经给你写了啊
lPageCount = adoPrimaryRS.PageCount‘得到的就是页数阿你的方法就不要用了。然后用rs(0)/2,如果有有小数就整数加1
因为得到的结果只能是1,1.5,2,2.5
自己用int(2.5)+1处理
adoPrimaryRS.PageSize = nPageSize
lPageCount = adoPrimaryRS.PageCount
adoPrimaryRS.CacheSize = adoPrimaryRS.PageSize ‘加载内存中显示的记录数
adoPrimaryRS.Open strSql, Conn, 3
这要应当可以啊!
给我发mail
[email protected]