Recordset 对象通常具有当前位置,通常位于记录处。 引用 Recordset 中的字段时,将从当前位置的记录中获取值,该记录称为当前记录。 但是,当前位置也可以是紧靠 Recordset 中第一条记录之前的位置,或紧靠最后一条记录之后的位置。 在某些情况下,当前位置未定义。
可以使用以下 Move 方法循环浏览 Recordset 中的记录:
MoveFirst 方法用于移动到第一条记录。
MoveLast 方法用于移动到最后一个记录。
MoveNext 方法用于移动到下一个记录。
MovePrevious 方法用于移动到上一个记录。
Move 方法用于向前或向后移动您在其语法中指定的记录数。
可以对表类型、动态集类型和快照类型的 Recordset 对象使用上述方法中的任何一个。 在仅向前类型的 Recordset 对象上,您只能使用 MoveNext 和 Move 方法。 如果在仅向前类型 Recordset 上使用 Move 方法,则指定要移动的行数的参数必须是正整数。
以下代码示例在包含所有记录(这些记录在 ReportsTo 字段中具有 Null 值)的 Employees 表上打开 Recordset 对象。 函数随后将更新记录以指明这些员工是临时员工。 对于 Recordset 中的每个记录,该示例都会更改 Title 和 Notes 字段,并使用 Update 方法保存更改。 该示例使用 MoveNext 方法移动到下一个记录。
Sub UpdateEmployees()
Dim dbsNorthwind As DAO.Database
Dim rstEmployees As DAO.Recordset
Dim strSQL As String
Dim intI As Integer
On Error GoTo ErrorHandler
Set dbsNorthwind = CurrentDb
' 在employee表中的所有记录上打开一个记录集
' ReportsTo字段中的空值
strSQL = "Select * FROM Employees Where ReportsTo IS NULL"
Set rstEmployees = dbsNorthwind.OpenRecordset(strSQL, dbOpenDynaset)
'如果记录集为空,则退出
If rstEmployees.EOF Then Exit Sub
intI = 1
With rstEmployees
Do Until .EOF
.Edit
![ReportsTo] = 5
![Title] = "Temporary"
![Notes] = rstEmployees![Notes] & "Temp #" & intI
.Update
.MoveNext
intI = intI + 1
Loop
End With
RstEmployees.Close
dbsNorthwind.Close
Set rstEmployees = Nothing
Set dbsNorthwind = Nothing
Exit Sub
ErrorHandler:
MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
End Sub
备 注:
上一个示例仅用于阐明 Update 和 MoveNext 方法。 为了获得最佳性能,建议使用 SQL Update 查询执行此批量操作。