注册 登录
编程论坛 VB6论坛

关于movenext的一点小问题

huangyz_xy 发布于 2016-11-01 21:17, 3342 次点击
这是我写的移动到下一条的代码,有点小问题不满意,点一次会自动移动到下一条记录,如果中间有N条记录不满足条件,也需要点击N次后才会在窗体显示我需要的记录,白白点击的这么多次窗体text内容不会变动(当然我也不需要让它变动)。我的想法是有什么法子,会跳过这中间的N个不满足条件的记录一次性跳到满足条件的记录并在窗体显示出来,真抠老壳!请大侠相助!
Private Sub Cmd_Next_Click()
    'If rst.State = adStateOpen Then rst.Close
    'rst.Open "SELECT * FROM GzTable where 来往单位=' & Com_Sz.Text'", conn, adOpenKeyset, adLockOptimistic
    If rst.BOF = False And rst.EOF = False Then
        If rst.Fields("来往单位").Value = Com_Sz.Text And rst.Fields("是否结账").Value = False Then
            Txt_JE.Text = rst.Fields("挂账金额").Value
            Txt_Rq.Text = rst.Fields("日期").Value
            Txt_Qd.Text = rst.Fields("签单人").Value
            Txt_Lm.Text = rst.Fields("挂账类目").Value
            Txt_Bz.Text = rst.Fields("备注").Value
        End If
    End If
    If rst.EOF = True Then
        MsgBox "已经是最后一条记录了!!", vbCritical + vbOKOnly, "提示"
    Else
        rst.MoveNext
    End If
End Sub
10 回复
#2
ZHRXJR2016-11-01 21:41
在通用部分定义一个SS变量 Dim SS As Integer ,你的 Cmd_Next_Click 事件中添加下面代码就解决问题了。
程序代码:
SS = SS + 1
rst.Open "SELECT * FROM GzTable where 来往单位='" & Com_Sz.Text & "' And 是否结账 = False", conn, adOpenKeyset, adLockOptimistic   '这样一条语句就能够解决问题,检测出来的数据均是符合要求的,不需要再次判断。
    For I = 1 To SS - 1
        rst.MoveNext   '点击一次,指针自动向下移动
    Next I
            Txt_JE.Text = rst.Fields("挂账金额").Value
            Txt_Rq.Text = rst.Fields("日期").Value
            Txt_Qd.Text = rst.Fields("签单人").Value
            Txt_Lm.Text = rst.Fields("挂账类目").Value
            Txt_Bz.Text = rst.Fields("备注").Value


在自动移动指针需要增加一个判断:
    For I = 1 To SS - 1
       If Not rst.EOF Then  rst.MoveNext   '点击一次,指针自动向下移动,如果指针已经到达末尾,不再移动
    Next I


[此贴子已经被作者于2016-11-1 21:53编辑过]

#3
huangyz_xy2016-11-01 22:12
回复 2楼 ZHRXJR
我发现选择com_sz的“挂账单位”后在窗体显示的是满足条件的最后一条记录,代码如下:
Private Sub Com_sz_click()
    If rst.State = adStateOpen Then rst.Close
    rst.Open "SELECT * FROM GzTable", conn, adOpenKeyset, adLockOptimistic
    If Not rst.EOF Then
        rst.MoveFirst
    End If
    For intloop1 = 0 To rst.RecordCount - 1
        If rst.Fields("来往单位").Value = Com_Sz.Text And rst.Fields("是否结账").Value = False Then
            Txt_JE.Text = rst.Fields("挂账金额").Value
            Txt_Rq.Text = rst.Fields("日期").Value
            Txt_Qd.Text = rst.Fields("签单人").Value
            Txt_Lm.Text = rst.Fields("挂账类目").Value
            Txt_Bz.Text = rst.Fields("备注").Value
            
        End If
        rst.MoveNext
    Next intloop1
End Sub
同时还有个"上一条"按钮,这个怎么解决?按照你的代码我试验了一次,存在一点小问题:1、好像只是点击第一次“下一条“的时候有效,后面就不行了;2、“上一条”和"下一条"不能自由的点击,点了“上一条”后再点击“下一条”不能返回!
不好意思,我是半壶水,问题有点多哈!

[此贴子已经被作者于2016-11-1 22:18编辑过]

#4
xzlxzlxzl2016-11-01 22:32
无论是用sql语句过滤符合条件的记录还是vb条件语句选择符合条件的记录,打开记录集的语句都必须在“上一条”“下一条”按钮外面。
就按照你的思路来,代码简单修改如下:
Private Sub Cmd_Next_Click()
    '下一条
    do while not rst.eof
        rst.movenext
        If rst.Fields("来往单位").Value = Com_Sz.Text And rst.Fields("是否结账").Value = False Then
            Txt_JE.Text = rst.Fields("挂账金额").Value
            Txt_Rq.Text = rst.Fields("日期").Value
            Txt_Qd.Text = rst.Fields("签单人").Value
            Txt_Lm.Text = rst.Fields("挂账类目").Value
            Txt_Bz.Text = rst.Fields("备注").Value
            exit do
        End If
     loop
     if rst.eof then MsgBox "已经是最后一条记录了!!", vbCritical + vbOKOnly, "提示"
End Sub

Private Sub Cmd_Prev_Click()
    '上一条
    do while not rst.bof
        rst.moveprev   '记录集向上的方法,可能拼写错误
        If rst.Fields("来往单位").Value = Com_Sz.Text And rst.Fields("是否结账").Value = False Then
            Txt_JE.Text = rst.Fields("挂账金额").Value
            Txt_Rq.Text = rst.Fields("日期").Value
            Txt_Qd.Text = rst.Fields("签单人").Value
            Txt_Lm.Text = rst.Fields("挂账类目").Value
            Txt_Bz.Text = rst.Fields("备注").Value
            exit do
        End If
     loop
     if rst.bof then MsgBox "已经是第一条记录了!!", vbCritical + vbOKOnly, "提示"
End Sub

[此贴子已经被作者于2016-11-1 22:36编辑过]

#5
huangyz_xy2016-11-01 22:55
回复 4楼 xzlxzlxzl
有点小问题,这样判断eof或者bof会出错!
#6
huangyz_xy2016-11-01 23:04
感谢xzlxzlxzl和ZHRXJR的鼎力支持!终于解决了所有的问题,又加了一条判断语句,分享一下:
Private Sub Cmd_Prev_Click()
    Do While Not rst.BOF
         rst.MovePrevious
         If rst.BOF = False And rst.EOF = False Then '记录集向上的方法,可能拼写错误
            If rst.Fields("来往单位").Value = Com_Sz.Text And rst.Fields("是否结账").Value = False Then
             Txt_JE.Text = rst.Fields("挂账金额").Value
             Txt_Rq.Text = rst.Fields("日期").Value
             Txt_Qd.Text = rst.Fields("签单人").Value
             Txt_Lm.Text = rst.Fields("挂账类目").Value
             Txt_Bz.Text = rst.Fields("备注").Value
             Exit Do
         End If
         End If
      Loop
      If rst.BOF Then MsgBox "已经是第一条记录了!!", vbCritical + vbOKOnly, "提示"
End Sub

Private Sub Cmd_Next_Click()
   Do While Not rst.EOF
         rst.MoveNext
         If rst.BOF = False And rst.EOF = False Then
         If rst.Fields("来往单位").Value = Com_Sz.Text And rst.Fields("是否结账").Value = False Then
             Txt_JE.Text = rst.Fields("挂账金额").Value
             Txt_Rq.Text = rst.Fields("日期").Value
             Txt_Qd.Text = rst.Fields("签单人").Value
             Txt_Lm.Text = rst.Fields("挂账类目").Value
             Txt_Bz.Text = rst.Fields("备注").Value
             Exit Do
         End If
         End If
      Loop
      If rst.EOF Then MsgBox "已经是最后一条记录了!", vbCritical + vbOKOnly, "提示"
End Sub
#7
xiangyue05102016-11-02 08:42
能自己研究搞定,赞一个。
#8
ZHRXJR2016-11-02 10:58
回复 3楼 huangyz_xy
你的问题没有说“上一条”、“下一条”,如果是“上一条”按钮、“下一条”按钮,非常简单。
我给你的代码是点击一次,移到到下一条,没有上一条的代码。
稍等给你“第一条”按钮、“上一条”按钮、“下一条”按钮、“最后一条”按钮的代码。
#9
huangyz_xy2016-11-02 11:42
回复 8楼 ZHRXJR
谢谢,看看你的实现方法,有你更精彩!
#10
xzlxzlxzl2016-11-02 13:43
题主通过询问、摸索得到正确答案的精神可嘉!至于代码的效率、精炼以及实现方法都可以通过训练提高,答主无需强加自己的实现思路。
#11
ZHRXJR2016-11-04 19:49
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

这个就是“第一条”按钮、“上一条”按钮、“下一条”按钮、“最后一条”按钮的代码。
1