gpt4 book ai didi

sql-server-2008 - 获取上次插入记录的 ID - Access DAO、ODBC、SQL Server 2008 身份字段

转载 作者:行者123 更新时间:2023-12-04 07:18:41 26 4
gpt4 key购买 nike

这是一个非常常见的问题,但我无法获取最后插入的记录的 ID。我将 DAO 与 ODBC 链接表一起使用来复制记录及其子记录。我的表在 SQL Server 2008 中并且具有 ID 字段的标识字段。

这是我到目前为止尝试过的方法。我这里的第一位代码导致错误 3167,记录被删除。如果我进行 debug.Print,则记录集实际上包含 3 条记录。

Dim r as DAO.Recordset, db as DAO.Database
Set db = CurrentDb
Set r = db.OpenRecordset("SELECT TOP 2 * FROM item ORDER BY DateTimeModified DESC", dbOpenDynaset, dbSeeChanges)
r.AddNew
'Set field values here
r.Update 'Completes without error
r.Bookmark = r.LastModified
Debug.Print r("ItemID") 'Error 3167, Record is deleted

这是我接下来尝试的事情:

Debug.Print db.OpenRecordset("SELECT @@identity FROM item")(0)

最后一个完成没有任何问题,但返回的值不正确。如果实际的新 ItemID 为 321,则返回值 614。它返回的值看起来确实是递增的(随着我不断测试它而改变),但它似乎与我的表完全无关。没有值为 614 的字段。我仔细检查以确保我正在查找正确的表格。

我知道我可以使用 DLookup 或 DMax 之类的东西,但我不认为这在多用户环境中被认为是万无一失的。

我想我可以使用带有 ADO 的存储过程来解决这个问题。我想知道这是否是我唯一的选择?

编辑1:
我现在正在使用以下代码,它正在做我需要/想要的事情。我怀疑这与使用 DMax 基本相同。

Dim r as DAO.Recordset, db as DAO.Database
Set db = CurrentDb
Set r = db.OpenRecordset("SELECT TOP 1 * FROM item ORDER BY ItemID DESC", dbOpenDynaset, dbSeeChanges)
r.AddNew
'Set field values here
r.Update
r.Requery
r.MoveFirst
Debug.Print r("ItemID")

最佳答案

据我所知,@@IDENTITY 不适用于基于游标的插入。 DAO 和 ADO 都在幕后使用游标。

在您.Update 记录后,您应该能够通过读取值简单地取回标识值。

通过使用键集语义打开的 ADO 记录集,以下内容对我来说工作正常:

r.Update
Debug.Print r("ItemID")

以下通过使用 Dynaset 语义打开的 DAO 记录集对我来说效果很好:

r.Update
r.Bookmark = r.LastModified
Debug.Print r("ItemID")

你应该避免 .Requery.MoveFirst,你会引入并发问题。考虑:

Dim r as DAO.Recordset, db as DAO.Database
Set db = CurrentDb
Set r = db.OpenRecordset("SELECT TOP 1 * FROM item ORDER BY ItemID DESC", dbOpenDynaset, dbSeeChanges)
r.AddNew
''// Set field values here
r.Update
''// At this point another user adds a new record
r.Requery
r.MoveFirst ''// ORDER BY ItemID DESC means that you're going to see the new user's row
Debug.Print r("ItemID")

关于sql-server-2008 - 获取上次插入记录的 ID - Access DAO、ODBC、SQL Server 2008 身份字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10905596/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com