如何获取由 SQL 插入生成的自动编号
How to get the AutoNumber generated by an SQL insert
我正在尝试编写一个函数来检查库存中的最小值 table 然后在该值低于最小值时生成并发送购买请求。
如果满足条件,则附加 sql 语句,如下所示 运行。
DoCmd.RunSQL "INSERT INTO [table1]('field 1', 'field 2')" & _
"VALUES ('value 1', 'value 2')"
我附加的 linked tables 使用自动编号字段作为主键,我需要将其值引用到 link 所请求的各种项目。我不知道如何存储为新记录生成的自动编号。我觉得我遗漏了一些非常简单的东西,但是 none 我的搜索已经找到了任何东西。
我希望能够编写第二个语句,如下所示,其中包含自动编号值。
DoCmd.RunSQL "INSERT INTO [table2]( 'ID' , 'field 3')" & _
"VALUES (" & TempVars!autonumber & ", 'value 3')"
原来我使用了错误的搜索词。
SELECT @@identity FROM table1
应该可以正常工作。
事实证明,尽管我仍然需要将@@Identity 存储为变量,以便它可以在未来循环中使用 sql "insert into".
下面的片段是我拼凑的,但它告诉我在这个集合中找不到 recSet!answer。
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
现在它returns一个值,但该值始终为“0”。它似乎没有获取输入上一条记录时生成的自动编号。
使用 DAO.Database
对象变量来执行你的 INSERT
并在你从 SELECT @@identity
获取值时再次执行这里的关键是对两者使用相同的 Database
变量.如果您尝试从 CurrentDb
(而不是 Database
对象变量)获取 SELECT @@identity
,您检索的值将始终为零。
我在 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
我正在尝试编写一个函数来检查库存中的最小值 table 然后在该值低于最小值时生成并发送购买请求。
如果满足条件,则附加 sql 语句,如下所示 运行。
DoCmd.RunSQL "INSERT INTO [table1]('field 1', 'field 2')" & _
"VALUES ('value 1', 'value 2')"
我附加的 linked tables 使用自动编号字段作为主键,我需要将其值引用到 link 所请求的各种项目。我不知道如何存储为新记录生成的自动编号。我觉得我遗漏了一些非常简单的东西,但是 none 我的搜索已经找到了任何东西。
我希望能够编写第二个语句,如下所示,其中包含自动编号值。
DoCmd.RunSQL "INSERT INTO [table2]( 'ID' , 'field 3')" & _
"VALUES (" & TempVars!autonumber & ", 'value 3')"
原来我使用了错误的搜索词。
SELECT @@identity FROM table1
应该可以正常工作。
事实证明,尽管我仍然需要将@@Identity 存储为变量,以便它可以在未来循环中使用 sql "insert into".
下面的片段是我拼凑的,但它告诉我在这个集合中找不到 recSet!answer。
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
现在它returns一个值,但该值始终为“0”。它似乎没有获取输入上一条记录时生成的自动编号。
使用 DAO.Database
对象变量来执行你的 INSERT
并在你从 SELECT @@identity
获取值时再次执行这里的关键是对两者使用相同的 Database
变量.如果您尝试从 CurrentDb
(而不是 Database
对象变量)获取 SELECT @@identity
,您检索的值将始终为零。
我在 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