Ms access 检索Access表的下一个自动编号

Ms access 检索Access表的下一个自动编号,ms-access,vb6,Ms Access,Vb6,我在Microsoft Access/JET中有一个表,该表有一个自动编号字段,该字段是递增设置的,用作表的主键。我需要知道下一条插入记录的主键的值,但是在插入记录之前我需要知道主键的值。使用从[TableName]中选择MAX([ID])+1将不起作用,因为记录通常会从表的末尾删除。(插入新记录只是为了计算值也不是一个选项。) 我知道在MySQL中,通过使用命令很容易做到这一点。有什么可以让我使用ADO、DAO、VB6或任何其他可用工具对Access/JET执行完全相同的操作吗?与SQL Se

我在Microsoft Access/JET中有一个表,该表有一个自动编号字段,该字段是递增设置的,用作表的主键。我需要知道下一条插入记录的主键的值,但是在插入记录之前我需要知道主键的值。使用
从[TableName]中选择MAX([ID])+1将不起作用,因为记录通常会从表的末尾删除。(插入新记录只是为了计算值也不是一个选项。)


我知道在MySQL中,通过使用命令很容易做到这一点。有什么可以让我使用ADO、DAO、VB6或任何其他可用工具对Access/JET执行完全相同的操作吗?

与SQL Server的标识列或MySQL的自动增量列相比,Access中的自动编号功能非常有限。除了使用不准确的SQL之外,无法检索下一个可用的数字。如您所述,从该端删除的记录将使其成为顶部数字和下一个数字不匹配的记录。(见下文编辑)

我认为最好使用长数字字段(而不是自动编号)并创建自己的自动递增函数,以便插入新记录时使用

编辑:

我知道汉瑟普已经找到了一种方法来满足你的要求。请看他的解决方案。

我最初同意HK1的解决方案,让您自己做,但Hans找到了更好的解决方案

我打算建议通过在带有回滚的事务中插入一条记录来查找ID。问题是,您将获得下一个数字(例如:62),但当您实际添加real的新记录时,您将获得后面的ID(63)。修复会将值重置为下一个可用数字

只是好奇,你为什么要知道这个号码?如果您有需要此值的记录(纸质或其他),则应在实际输入记录后将其输入该系统/纸质工作

您可以使用ADOX(用于DDL和安全性的Microsoft ADO扩展)来确定自动编号字段的当前“种子”值

Public Function nextutonNumber(ByVal可接受为字符串_
ByVal pAutonumField(作为字符串)长度相同
以猫为对象
设置cat=CreateObject(“ADOX.Catalog”)
设置cat.ActiveConnection=CurrentProject.Connection
NextAutonumber=cat.Tables(pTable).Columns(pAutonumField).Properties(“种子”)
设置cat=Nothing
端函数

注意:在多用户情况下,这种方法可能会给出错误的结果。。。如果另一个用户可以在您检索下一个自动编号和您实际执行
INSERT
之间偷偷插入
。如果它很关键,您可以通过在插入后检查
SELECT@@Identity
来验证您是否得到了预期的值,这就是我最后要做的。我想您不需要事先知道数字。你为什么这么认为?我觉得很有趣,有些人喜欢问你为什么需要一些东西,而不是仅仅回答问题。为什么有人会浪费时间回答一个毫无意义的问题?也就是说,我为什么要解释如何去做一件任何人都不需要做的事情呢?代理PK值不应该被赋予任何意义,因此您永远不应该关心下一个值是什么。如果您真的在意,那么您应该自己管理字段中的值,而不是依赖数据库引擎来分配它们。当然,关于如何找出种子值的答案在我发表评论时已经发布了,所以我根本没有理由发布答案!什么是CurrentProject.Connection??