检索下一个AutoNumber for Access表

时间:2011-06-27 19:58:28

标签: ms-access vb6

我在Microsoft Access / JET中有一个表,其中包含一个自动设置的自动编号字段,该字段用作表的主键。我需要知道主键的值对于下一个插入的记录是什么,但是我需要在插入记录之前知道值。使用SELECT MAX([ID]) + 1 FROM [TableName];将不起作用,因为记录通常从表的末尾删除。 (插入新记录只是为了找出值也不是一种选择。)

我知道使用SHOW TABLE STATUS命令可以在MySQL中轻松完成 。是否有任何东西可以让我使用ADO,DAO,VB6或任何其他可用工具为Access / JET做同样的事情?

3 个答案:

答案 0 :(得分:7)

您可以使用ADOX(Microsoft ADO Extensions for DDL and Security)来确定自动编号字段的当前“种子”值。

Public Function NextAutonumber(ByVal pTable As String, _
        ByVal pAutonumField As String) As Long

    Dim cat As Object
    Set cat = CreateObject("ADOX.Catalog")
    Set cat.ActiveConnection = CurrentProject.Connection
    NextAutonumber = cat.Tables(pTable).Columns(pAutonumField).Properties("Seed")
    Set cat = Nothing
End Function

请注意,这种方法可能会在多用户情况下产生错误的结果...如果其他用户可以在您检索下一个自动编号和实际执行INSERT之间潜入INSERT 。如果它很重要,您可以在SELECT @@Identity之后检查INSERT来验证您是否获得了预期的价值。

答案 1 :(得分:1)

与SQL Server的标识列或MySQL的AUTO_INCREMENT列相比,Access中的自动编号功能非常有限。 除了使用不准确的SQL之外,没有办法检索下一个可用的数字。正如你所说,从那时起删除的记录将使得最高号码和下一个号码不匹配。(见下面的编辑)。

我认为你最好使用长数字段(不是自动编号)并创建你自己的插入新记录时使用的自动递增功能。

修改
我看到HansUp实际上找到了一种方法来做你想要的。请看他的解决方案。

答案 2 :(得分:1)

我最初同意HK1的解决方案来做自己的,但汉斯找到了更好的解决方案。

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

好奇,为什么你需要知道这个号码?如果您有需要此值的记录(纸张或其他),则应在实际输入记录后在该系统/文书中输入该记录。