访问:移至下一条记录,直到EOF

时间:2011-06-15 15:16:03

标签: ms-access vba

我需要通过移动到记录集中的下一条记录来遍历表单。

我正在使用Form_Current事件来循环。 我使用了几个陈述并且有不同的结果。

这个有时崩溃并给出错误消息:“你不能去指定的记录。”

DoCmd.GoToRecord , , acNext

这个只有72个记录并停止。

DoCmd.RunCommand acCmdRecordsGoToNext

这个只有129个记录并停止。

Me.Recordset.MoveNext

尝试查找将转到下一条记录的指令,直到它到达文件结尾。 我使用Access 2010(Access 2002 -2003文件格式mdb)作为前端。记录源是SQL Server 2008链接的视图。

7 个答案:

答案 0 :(得分:8)

从当前记录循环到结束:

While Me.CurrentRecord < Me.Recordset.RecordCount
    ' ... do something to current record
    ' ...

    DoCmd.GoToRecord Record:=acNext
Wend

检查是否可以转到下一条记录:

If Me.CurrentRecord < Me.Recordset.RecordCount Then
    ' ...
End If

答案 1 :(得分:3)

If (Not IsNull(Me.id.Value)) Then
DoCmd.GoToRecord , , acNext
End If

您好, 你需要把它放在激活形式,并有一个名为id ...的id字段

这种方式直到它到达没有id的那个(AKA新的)......

答案 2 :(得分:3)

我过去做过这个,并且一直使用它:

  With Me.RecordsetClone
    .MoveFirst
    Do Until .EOF
      If Me.Dirty Then
         Me.Dirty = False
      End If
      .MoveNext
      Me.Bookmark = .Bookmark
    Loop
  End With

有些人会使用表单的Recordset,它不需要设置书签(即,导航表单的Recordset自动导航表单的编辑缓冲区,因此用户立即看到移动),但我更喜欢RecordsetClone的间接

答案 3 :(得分:2)

Set rs = me.RecordsetClone
rs.Bookmark = me.Bookmark
Do
    rs.movenext
Loop until rs.eof

答案 4 :(得分:1)

使代码保持简单永远是我的建议:

If IsNull(Me.Id) = True Then
  DoCmd.GoToRecord , , acNext
Else
  DoCmd.GoToRecord , , acLast
End If

答案 5 :(得分:0)

如果您希望cmd按钮在表单记录中循环,请尝试将此代码添加到cmdNext_ClickcmdPrevious_Click VBA中。 我发现它很好用,并且可以解决BOF / EOF问题:

On Error Resume Next

DoCmd.GoToRecord , , acNext

On Error Goto 0


On Error Resume Next

DoCmd.GoToRecord , , acPrevious

On Error Goto 0

祝你好运! PT

答案 6 :(得分:-1)

在表单关闭事件上添加此代码无论您是添加新记录还是删除,它都会从1到最后一条记录重新创建主键。此代码不会干扰表的其他列。

Sub updatePrimaryKeysOnFormClose()
    Dim i, rcount As Integer
    'Declare some object variables
    Dim dbLib As Database
    Dim rsTable1 As Recordset
    'Set dbLib to the current database (i.e. LIBRARY)
    Set dbLib = CurrentDb
    'Open a recordset object for the Table1 table
    Set rsTable1 = dbLib.OpenRecordset("Table1")
    rcount = rsTable1.RecordCount
    '== Add New Record ============================  
        For i = 1 To rcount
              With rsTable1
                      rsTable1.Edit  
                      rsTable1.Fields(0) = i  
                      rsTable1.Update  
                      '-- Go to Next Record ---  
                      rsTable1.MoveNext
             End With  
        Next  
        Set rsTable1 = rsTable1
End Sub