如何获取SQL插入生成的自动编号

时间:2015-09-19 00:31:37

标签: sql ms-access autonumber

我正在尝试编写一个函数来检查库存表中的最小值,然后生成并发送购买请求(如果该值低于最低级别)。

如果满足条件,则运行如下所示的附加sql语句。

DoCmd.RunSQL "INSERT INTO [table1]('field 1', 'field 2')" & _
             "VALUES ('value 1', 'value 2')"

我附加的链接表使用自动编号字段作为主键,我需要引用其值来链接所请求的各个项目。我不知道如何存储为新记录生成的自动编号。我觉得我错过了一些非常简单的东西,但我的搜索都没有带来任何好处。

我希望能够编写第二个语句,如下所示,并包含自动编号值。

DoCmd.RunSQL "INSERT INTO [table2]( 'ID' , 'field 3')" & _
             "VALUES (" & TempVars!autonumber & ", 'value 3')"

2 个答案:

答案 0 :(得分:2)

使用DAO.Database对象变量来执行INSERT,并在从SELECT @@identity获取值时再次执行此操作。此处的密钥对两者都使用相同的Database变量。如果您尝试从SELECT @@identity(而不是CurrentDb对象变量)获取Database,则您检索的值将始终为零。

我在Access 2010中测试了此代码。

Dim db As DAO.Database
Dim strInsert As String

Set db = CurrentDb
strInsert = "INSERT INTO [table1]([field 1], [field 2])" & vbCrLf & _
    "VALUES ('value 1', 'value 2')"
db.Execute strInsert, dbFailOnError

TempVars.Add "itemNum", db.OpenRecordset("SELECT @@identity")(0).Value
MsgBox "TempVars!itemNum: " & TempVars!itemNum

答案 1 :(得分:0)

事实证明我使用的是错误的搜索字词。

SELECT @@identity FROM table1应该可以正常工作。

事实证明,虽然我仍然需要将@@ Identity存储为变量,以便它可以用作未来的循环sql“insert into”。

下面的代码片段是我拼凑在一起但它告诉我在这个集合中找不到recSet!答案。

    Dim recSet As DAO.Recordset
    Set recSet = CurrentDb.OpenRecordset("SELECT @@identity")

    TempVars.Add "itemNum", recSet!answer

    recSet.Close
    Set recSet = Nothing

我已将我的代码更新为以下

Dim recSet As DAO.Recordset
Set recSet = CurrentDb.OpenRecordset("SELECT @@identity")

Dim test As Long
test = recSet.Fields(0).Value
Debug.Print test

recSet.Close
Set recSet = Nothing

现在它返回一个值,但值始终为“0”。它似乎没有抓住输入上一条记录时生成的自动编号。