您必须区分自动化 Access 对象和使用代码中的记录集。
在一个表格中,这个命令有含义:
DoCmd.GoToRecord , , acNext
它是非特定的,除非您知道表单中基础记录集的顺序和起始记录,否则无法预测它将转到哪条记录。它引导您浏览存储在表单编辑缓冲区(在表单的 OnOpen 事件中加载)中的记录集。例如,该命令将用于命令按钮后面的代码中,其目的是导航加载到当前具有焦点的表单中的记录。如果我要使用该命令,我永远不会遗漏可选参数(我几乎从不这样做)。相反,我会确定我希望它应用到的特定表单:
DoCmd.GoToRecord acForm, "MyForm", acNext
在遍历 DAO 记录集时,.MoveNext 同样没有预定义的含义,除非您知道排序和起始记录。当你在遍历一个记录集(你不应该经常做的事情,因为它效率很低;但这取决于你需要执行的任务)并且需要点击每条记录时,你肯定会调用 .MoveNext 作为你的一部分循环:
With rs
.MoveFirst ' technically not required, as it's the default starting point
Do Until .EOF
[do something]
.MoveNext
Loop
End With
那里没有什么神秘的。它最有可能用于记录数量较少的代码中(大型记录集确实不应该按顺序导航)。
回答您的具体问题:
在数据库中是什么意思
上下文移动到“下一个”记录?
此特定表使用标识
列作为PK,内部也是如此
抓住所有的身份证然后移动
到次高的那个???
...正如我所说,下一条记录由被遍历的记录集的顺序和起始位置决定。在表单的情况下,它是被遍历的编辑缓冲区,并且随着编辑缓冲区中当前记录书签的更改,表单被更新以加载该记录的数据。动态集绑定到底层数据表,当保存表单的编辑缓冲区时,将编辑后的数据写回服务器。在编辑时,服务器上的记录可能会或可能不会保持锁定,但 Access/Jet/ACE 会跟踪服务器上现有记录的状态和编辑缓冲区中的记录,并会在如果服务器上的记录在加载到表单的编辑缓冲区后发生更改,则可以在 Access 中节省时间。
现在,在评论中,您说表单绑定到整个表格。无论您的数据是存储在 Jet/ACE 后端数据文件中还是存储在 SQL Server 等服务器数据库中,这都是一个糟糕的设计。 Access 可以摆脱它的唯一原因是它和 Jet 在从数据源中提取数据方面相当有效。
我设计合理的客户端/服务器 Access 前端不会在表单中加载完整的表,而是询问您要加载的过滤记录集,一次可以加载 1 个或多个记录。这仅比绑定到整个表稍微复杂一点。
至于知道正在使用的游标类型,您不必担心。默认情况下,Access 表单使用 Access/Jet/ACE 所称的动态集。每个表单都有一个 RecordsetType 属性,默认设置为 dynaset(阅读帮助文件了解不同记录集类型的含义)。如果您想要更多地控制它,您可以(但可能不应该)在代码中创建您的记录集并将它们分配给表单的 .Recordset 属性。这在某些情况下很有用,例如当您想将表单绑定到断开连接的记录集时,但 Access 的重点是利用其处理绑定数据的功能。分配您自己的记录集仍然可以让您绑定控件和表单事件,但工作量比通常需要的要多。
基本上,将您的表单更改为仅加载用户需要使用的记录子集(一次可能只有一条记录),然后让其他所有操作都使用 Access 的默认行为完成。如果某事导致了瓶颈,则对其进行故障排除并用更有效的方法替换默认行为。
换句话说,避免过早的优化——让 Access 成为 Access。
不要担心 Access 在幕后做了什么,除非/直到 Access 做了不恰当的事情。