Ms access 访问:移动到下一个记录,直到EOF
我需要通过移动到记录集中的下一条记录来循环浏览表单 我正在使用Form_Current事件循环通过。 我用了两种说法,得出了不同的结果 这一条有时会崩溃,并给出错误消息:“您无法转到指定的记录。” 这一次最多只能记录72条记录并停止Ms access 访问:移动到下一个记录,直到EOF,ms-access,vba,Ms Access,Vba,我需要通过移动到记录集中的下一条记录来循环浏览表单 我正在使用Form_Current事件循环通过。 我用了两种说法,得出了不同的结果 这一条有时会崩溃,并给出错误消息:“您无法转到指定的记录。” 这一次最多只能记录72条记录并停止 DoCmd.RunCommand acCmdRecordsGoToNext Me.Recordset.MoveNext 这一次最多只能记录129条记录并停止 DoCmd.RunCommand acCmdRecordsGoToNext Me.Recordset.
DoCmd.RunCommand acCmdRecordsGoToNext
Me.Recordset.MoveNext
这一次最多只能记录129条记录并停止
DoCmd.RunCommand acCmdRecordsGoToNext
Me.Recordset.MoveNext
试图找到一条指令,该指令将转到下一条记录,直到到达文件末尾。
我使用Access 2010(Access 2002-2003文件格式mdb)作为前端。记录源是一个SQL Server 2008链接视图
If (Not IsNull(Me.id.Value)) Then
DoCmd.GoToRecord , , acNext
End If
嗨,
你需要把它放在激活表单中,并有一个名为id的id字段
通过这种方式,它会一直传递,直到到达一个没有id的记录(也称为新记录).以从当前记录循环到结束:
While Me.CurrentRecord < Me.Recordset.RecordCount
' ... do something to current record
' ...
DoCmd.GoToRecord Record:=acNext
Wend
而Me.CurrentRecord
要检查是否可以转到下一个记录:
If Me.CurrentRecord < Me.Recordset.RecordCount Then
' ...
End If
如果Me.CurrentRecord
我过去曾经这样做过,并且一直使用:
With Me.RecordsetClone
.MoveFirst
Do Until .EOF
If Me.Dirty Then
Me.Dirty = False
End If
.MoveNext
Me.Bookmark = .Bookmark
Loop
End With
有些人会使用表单的记录集,这不需要设置书签(即,导航表单的记录集会自动导航表单的编辑缓冲区,因此用户会立即看到移动),但我更喜欢间接地使用记录集克隆。无论您是添加新记录还是删除,在表单关闭事件中添加此代码,它将重新创建从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
如果希望cmd按钮在表单记录中循环,请尝试将此代码添加到
cmdNext\u单击
和cmdPrevious\u单击
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保持代码简单始终是我的建议:
If IsNull(Me.Id) = True Then
DoCmd.GoToRecord , , acNext
Else
DoCmd.GoToRecord , , acLast
End If
我在表单上使用ActiveX控件,需要单独处理每条记录。@David:我在那里设置了书签,以便循环从当前记录开始。他最初说他需要遍历记录,这并不意味着要移动表单本身。关于RecordsetClone和表单的编辑/显示缓冲区之间的区别,有一点很好——即RecordsetClone书签独立于表单的记录指针来导航RecordsetClone。您可能希望在不更改显示缓冲区的情况下进行编辑。所以,我删除了我的评论。但是,如果编辑记录需要ActiveX控件,那么这肯定必须在表单的编辑/显示缓冲区中完成,而不仅仅是在RecordsetClone中,因为ActiveX控件只能在表单的编辑缓冲区(即显示的内容)上操作。我喜欢这样。又好又简单。谢谢