向高手请教显示多条记录的问题,请大家帮忙!!!

18829848 2004-07-29 10:58:11
我在FORM上放了很多的Label来显示数据,但是当数据有多条时我希望在
FORM上已经显示的第一条记录下方接着显示记录,请问高手教我怎么做。
例如:我查询出的记录有三条,我要在FORM上显示第一条和第二条,第三
条另外打开这一个FORM写,但是这个FORM上的Label是不变的,也就是说
只有这几个,不知道这样说清楚了没有。
form 页上的Label格式:
lblYYH lblYYLX
lblMLDJ lblJJLB
lblJBDJ lblJFRL
lblYDXZ lblLTBZ
lblLLBZ lblJFBL
lblCTBB lblPTBB
lblJLFS
我填写数据的代码如下:
Public Sub 填写页面(nZHH As Long)
Dim rs As New dbRecordset

rs.Open "SELECT * FROM KHDA_YDD111 WHERE ZHH=" & nZHH
Do While Not rs.EOF
If Not rs.EOF Then
lblYYH = rs("YYH")
lblYYLX = rs("JFLX")
lblMLDJ = rs("FLSM")
lblJJLB = rs("FLSM")
lblJBDJ = rs("JBDJ")
lblJFRL = rs("JFRL")
lblYDXZ = rs("YDXZ")
lblLTBZ = rs("LTBZ")
lblLLBZ = rs("LLBZ")
lblJFBL = rs("BL")
lblCTBB = rs("CTBB")
lblPTBB = rs("PTBB")
lblJLFS = rs("JLFS")
End If
rs.MoveNext
Loop
rs.Close
end sub
...全文
256 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
by_stephen 2004-08-03
  • 打赏
  • 举报
回复
不好意思,刚发完,发现几处错误,改正从发。

假设你显示数据的窗体为frmShowData。窗体上下一个按纽为cmdNext。
Private rsData As New dbRecordset

Private Sub OpenRs(nZHH As Long)

rsData.Open "SELECT * FROM KHDA_YDD111 WHERE ZHH=" & nZHH

ShowData(rsData)

End Sub

Public Sub ShowData(ByRef rsTmp As dbRecordset)

Dim i As Integer

'因为知道记录数,可以用固定的循环。
For i=0 to 1
If Not rsTmp.EOF Then
'在Lable上显示数据。
......
End if
rsTmp.MoveNext
Next

End Sub

Private Sub cmdNext_Click()

Dim frmNext As New frmShowData

'调用另一个窗体的公用过程显示另外的记录。
'rsData传递过去时,指针应该停留在第三条记录上。
frmNext.ShowData(rsData)
frmNext.Show

End Sub

有些地方考虑不周,仅供参考。
by_stephen 2004-08-03
  • 打赏
  • 举报
回复
假设你显示数据的窗体为frmShowData。窗体上下一个按纽为cmdNext。
Private rsData As New dbRecordset

Private Sub OpenRs()

rsData.Open "SELECT * FROM KHDA_YDD111 WHERE ZHH=" & nZHH

ShowData(rsData)

End Sub

Public Sub ShowData(rsTmp As dbRecordset)

Dim i As Integer

'因为知道记录数,可以用固定的循环。
For i=0 to 1
If Not rs.EOF Then
'在Lable上显示数据。
......
End if
rsData.MoveNext
Next

End Sub

Private Sub cmdNext_Click()

Dim frmNext As New frmShowData

'调用另一个窗体的公用过程显示另外的记录。
'rsData传递过去时,指针应该停留在第三条记录上。
frmNext.ShowData(rsData)
frmNext.Show

End Sub

有些地方考虑不周,仅供参考。
xiaoxiaoP 2004-08-03
  • 打赏
  • 举报
回复

Public Sub 填写页面(nZHH As Long)
Dim rs As New dbRecordset
dim icount(2) as integer
rs.Open "SELECT * FROM KHDA_YDD111 WHERE ZHH=" & nZHH ''此处加一排序
rs.movefirst

''Do While Not rs.EOF
If Not rs.EOF Then
lblYYH(icount(0)) = rs("YYH")
lblYYLX(icount(0)) = rs("JFLX")
lblMLDJ(icount(0)) = rs("FLSM")
lblJJLB(icount(0)) = rs("FLSM")
lblJBDJ(icount(0)) = rs("JBDJ")
lblJFRL(icount(0)) = rs("JFRL")
lblYDXZ(icount(0)) = rs("YDXZ")
lblLTBZ(icount(0)) = rs("LTBZ")
lblLLBZ(icount(0)) = rs("LLBZ")
lblJFBL(icount(0)) = rs("BL")
lblCTBB(icount(0)) = rs("CTBB")
lblPTBB(icount(0)) = rs("PTBB")
lblJLFS(icount(0)) = rs("JLFS")
......
rs.MoveNext
If Not rs.EOF Then
lblYYH(icount(1)) = rs("YYH")
lblYYLX(icount(1)) = rs("JFLX")
lblMLDJ(icount(1)) = rs("FLSM")
lblJJLB(icount(1)) = rs("FLSM")
lblJBDJ(icount(1)) = rs("JBDJ")
lblJFRL(icount(1)) = rs("JFRL")
lblYDXZ(icount(1)) = rs("YDXZ")
lblLTBZ(icount(1)) = rs("LTBZ")
lblLLBZ(icount(1)) = rs("LLBZ")
lblJFBL(icount(1)) = rs("BL")
lblCTBB(icount(1)) = rs("CTBB")
lblPTBB(icount(1)) = rs("PTBB")
lblJLFS(icount(1)) = rs("JLFS")
......
end if
End If
''rs.MoveNext
''Loop
rs.Close
end sub
以上为程序初始,下一页按钮的事件代码查询语句相同,向下移动指针判断出第二条纪录,然后,movenext,为新一页的第一条纪录,再movenext,为新一页的第二条纪录。
18829848 2004-08-03
  • 打赏
  • 举报
回复
谢谢by_stephen(大白菜)兄的指教,由于刚接触VB不懂的还很多。
我现在的问题是在一个FORM上分为两半显示数据上半部和下半部
都是放的LABEL,实际上是一LABEL组,我要将查询出的数据分页
显示出来,我查询出数据有多条时我怎样将数据传过去呀?比如:
rs.open"select zhh,yyh from khda_ydd111 where zhh=" & nZHH
语句查询出同一总户有YYH为1,2,3,5四条的数据,我要用同一个
FORM分两页来显示,第一页显示YYH为1,2的数据,点击FORM上的
下一页按钮打开相同的FORM来显示YYH为3,5的数据,YYH的数据最多
只有四条,但号码有可能不连续。
by_stephen 2004-08-03
  • 打赏
  • 举报
回复
VB中的窗体其实是一个特殊的类,你添加了一个窗体,也就是定义了一个类。
首先添加窗体(类) frmShowDate(名称任意)。然后声明此窗体类的两个实例,
Dim frmA As New frmShowDate(与窗体类的名称相同)
Dim frmB As New frmShowDate

18829848 2004-08-03
  • 打赏
  • 举报
回复
今天了还是没有解决。by_stephen(大白菜)兄,你的Dim frmA As New frmShowDate
代码是定义什么呀没弄懂,怎么我定义时没有frmShowDate显示呢。
18829848 2004-08-03
  • 打赏
  • 举报
回复
谢谢by_stephen(大白菜)兄,其实我没有按你说的方法做,因为往ShowData(rsData)
传值时老是说类型不匹配等问题,我把我原来的程序中的循环去掉了,然后一个一个
地写,每次写两个记录,这样来实现的,但我想到如果这样做大于四条记录就不好做
了,因为我是movenext到第三条记录时再写,写完屏蔽下一页按钮,如果不屏蔽的话
继续点击按钮还是会打开第三条和第四条记录。总之还是谢谢大家。
by_stephen 2004-08-03
  • 打赏
  • 举报
回复
开动脑筋。多点几次Next按纽就知道了。
18829848 2004-08-03
  • 打赏
  • 举报
回复
问题基本解决,今天下班结帖,谢谢大家了,尤其要感谢by_stephen(大白菜)兄的
多次帮助。现在还有个问题,如果是不止四条记录该怎么做呢?
northwolves 2004-07-30
  • 打赏
  • 举报
回复
可以将所有LABEL 放入一个FRAME 中,用垂直滚动条移动滑块控制所显示的当前记录。如:
'add four label1(index=0 to 3) to frame1,a vscroll on form1:

Private Sub Form_Load()
VScroll1.Move Frame1.Left + Frame1.Width, Frame1.Top, 500, Frame1.Height
VScroll1.Max = 5
VScroll1.Min = 1
VScroll1.Value = 1
End Sub

Private Sub VScroll1_Change()
For i = 0 To 3
Label1(i).Caption = "No." & VScroll1.Value & ":label1(" & i & ")"
Next
End Sub
18829848 2004-07-30
  • 打赏
  • 举报
回复
没有人能教我怎么样分页显示数据吗,就是在一页上只显示两条记录,点击
下一页按钮显示两条后的数据,如果rs("YYH")=1和2我就将记录写到form上
的Label上显示,但当记录rs("YYH")=3和4时再点击下一页按钮打开同一form
将记录写在form上显示。
by_stephen 2004-07-30
  • 打赏
  • 举报
回复
如何不行?
18829848 2004-07-30
  • 打赏
  • 举报
回复
还是不行,还得请教各位!
18829848 2004-07-30
  • 打赏
  • 举报
回复
谢谢了,我先试试看。
by_stephen 2004-07-30
  • 打赏
  • 举报
回复
建立显示数据的窗体frmShowData,将取数据和填充Label的代码放在另一个窗体或模块中,
Dim frmA As New frmShowDate
Dim frmB As New frmShowDate

......

Select Case rs("yyh")
Case 1,2:Call ShowData(frmA)
Case 3,4:Call ShowData(frmB)
End Select
......

Private Function ShowData(frmData As Object)
With frmData
......
End With
End Function

不知道这样可否?






zhuiguo 2004-07-30
  • 打赏
  • 举报
回复
用控制数组吧,最方便不过了!
18829848 2004-07-30
  • 打赏
  • 举报
回复
谢谢楼上的老兄,我的记录是通过SQL查询出的,最多只有“YYH=4”
的情况,我的form上有下一页和退出等按钮,现在的问题就是我不知道
要怎样将“YYH=3“和”YYH=4”的情况用同一页来显示。我填写等于1和2
的代码如下:
Public Sub 填写页面(nZHH As Long)
Dim rs As New dbRecordset
dim icount(2) as integer
rs.Open "SELECT * FROM KHDA_YDD111 WHERE ZHH=" & nZHH
Do While Not rs.EOF
If Not rs.EOF Then
if rs("yyh")=1 then
lblYYH(icount(0)) = rs("YYH")
lblYYLX(icount(0)) = rs("JFLX")
lblMLDJ(icount(0)) = rs("FLSM")
lblJJLB(icount(0)) = rs("FLSM")
lblJBDJ(icount(0)) = rs("JBDJ")
lblJFRL(icount(0)) = rs("JFRL")
lblYDXZ(icount(0)) = rs("YDXZ")
lblLTBZ(icount(0)) = rs("LTBZ")
lblLLBZ(icount(0)) = rs("LLBZ")
lblJFBL(icount(0)) = rs("BL")
lblCTBB(icount(0)) = rs("CTBB")
lblPTBB(icount(0)) = rs("PTBB")
lblJLFS(icount(0)) = rs("JLFS")
......
end if
if rs("yyh")=2 then
lblYYH(icount(1)) = rs("YYH")
lblYYLX(icount(1)) = rs("JFLX")
lblMLDJ(icount(1)) = rs("FLSM")
lblJJLB(icount(1)) = rs("FLSM")
lblJBDJ(icount(1)) = rs("JBDJ")
lblJFRL(icount(1)) = rs("JFRL")
lblYDXZ(icount(1)) = rs("YDXZ")
lblLTBZ(icount(1)) = rs("LTBZ")
lblLLBZ(icount(1)) = rs("LLBZ")
lblJFBL(icount(1)) = rs("BL")
lblCTBB(icount(1)) = rs("CTBB")
lblPTBB(icount(1)) = rs("PTBB")
lblJLFS(icount(1)) = rs("JLFS")
......
end if
End If
rs.MoveNext
Loop
rs.Close
end sub
RUKYO 2004-07-30
  • 打赏
  • 举报
回复
不大明白,你数据库“YYH”等字段只有4条记录吗?如果有多条记录而你又想翻后一页后还是用同一个Form,那如果用户想看前一页的呢?
frankwong 2004-07-29
  • 打赏
  • 举报
回复
网格控件,如果不用编辑的,建议使用listview或msflexgrid
18829848 2004-07-29
  • 打赏
  • 举报
回复
谢谢楼上两位老兄,我是要这样显示出来再打印,
就是要分开显示记录,用控件来显示记录就在一起呀,
其实还有其他的记录,我这里只列出部分。有没有办法
实现呀,请大家帮忙。
加载更多回复(3)

1,216

社区成员

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

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