我们使用Access 2016作为前端,使用SQL Server 2008作为后端。
用户在表单中创建新记录。为了生成此新记录的自动编号ID,我使用DoCmd.RunCommand acCmdSaveRecord
。当我使用此命令时,表单移出该记录。然后我需要找到刚刚创建的记录的ID。我无法搜索最大的自动编号ID,因为我们使用合并复制,不同的用户具有不同的ID范围。
我尝试使用DateCreated
列并在SQL Server中使用GetDate()
将该列默认为当前日期和时间,但这会使Access出现锁定错误和其他错误,因为它无法正确读取SQL Server的日期时间格式。
是否有.saverecord
选项不会移出表单中的当前记录?或者是否有使用SQL Server后端和Access前端时不会产生错误的日期/时间字段?
简而言之,我需要在表单中创建的最后一条记录的自动编号。
答案 0 :(得分:0)
使用Pass through查询在插入记录后运行此SQL语句:
SELECT SCOPE_IDENTITY() AS ID
它将返回当前范围中使用的最后一个创建的标识。
答案 1 :(得分:0)
要在绑定到sql server表的Access表单中填充自动编号字段,只需强制表单保存记录即可。保存记录的行为不会也不应该也不会将表格移出记录。
获取自动编号的代码是:
If me.Dirty = True then Me.Dirty = false
Debug.print "Auto number from SQL server = " & me!id
作为一般规则,您不能使用SELECT SCOPE_IDENTITY(),因为表单中使用的连接将与用于执行SQL传递查询的连接不同。所以这里的反应是疯狂的追逐和不正确以及解决这个问题的错误方法。
答案 2 :(得分:-1)
在同一会话中运行另一个命令以获取id:
SELECT @@IDENTITY
有关详细信息,请查看:MSDN文档。
无论如何,如果你有一个访问数据库的API,并且它没有公开它,那么应该花费它来返回范围标识,因为这是了解生成ID的唯一可靠方法。