Sql server 2008 如何在前端访问中设置与后端SQL兼容的日期/时间?

Sql server 2008 如何在前端访问中设置与后端SQL兼容的日期/时间?,sql-server-2008,datetime,ms-access,Sql Server 2008,Datetime,Ms Access,我们使用Access 2016作为前端,SQL Server 2008作为后端 用户在表单中创建新记录。为了为这个新记录生成一个自动编号的ID,我使用了DoCmd.RunCommand acCmdSaveRecord。当我使用此命令时,窗体将从该记录中移出。然后我需要找到刚刚创建的记录的ID。我无法搜索最大的自动编号ID,因为我们使用合并复制,并且不同的用户具有不同的ID范围 我尝试创建一个DateCreated列,并通过在SQL Server中使用GetDate()将该列默认为当前日期和时间,

我们使用Access 2016作为前端,SQL Server 2008作为后端

用户在表单中创建新记录。为了为这个新记录生成一个自动编号的ID,我使用了
DoCmd.RunCommand acCmdSaveRecord
。当我使用此命令时,窗体将从该记录中移出。然后我需要找到刚刚创建的记录的ID。我无法搜索最大的自动编号ID,因为我们使用合并复制,并且不同的用户具有不同的ID范围

我尝试创建一个
DateCreated
列,并通过在SQL Server中使用
GetDate()
将该列默认为当前日期和时间,但这会导致Access出现锁定错误和其他错误,因为它无法正确读取SQL Server的日期时间格式

是否有一个
.saverecord
选项不从表单中的当前记录中移出?或者,在使用SQL Server后端和Access前端时,是否存在不会产生错误的日期/时间字段


简而言之,我需要表单中创建的最后一条记录的自动编号ID

插入记录后,使用传递查询运行此SQL语句:

SELECT SCOPE_IDENTITY() AS ID

它将返回在当前作用域中使用的上次创建的标识。

在同一会话中运行另一个命令以获取标识:
选择@@IDENTITY

有关更多详细信息,请查看:文档


无论如何,如果您有一个API来访问数据库,但它没有公开这个API,那么应该使用它来返回作用域标识,因为这是知道生成了什么ID的唯一可靠方法

要在绑定到sql server表的Access窗体中填充自动编号字段,只需强制窗体保存记录即可。保存记录的行为不会也不应该也不会将表单移出记录

因此,获取自动编号的代码为:

If me.Dirty = True then  Me.Dirty = false
Debug.print "Auto number from SQL server = " & me!id

通常不能使用SELECT SCOPE_IDENTITY(),因为表单中使用的连接与执行SQL传递查询时使用的连接不同。因此,这里的回答是徒劳的追逐和不正确的和错误的方式来处理这个问题

我在VBA前端编码,而不是在SQL数据上运行程序。VBA代码中是否有类似的内容?您只需在同一会话中运行另一个查询即可获取@@IDENTITY-检查是否有用于获取本地访问表的最新标识的内容,但您必须调用此函数,才能使用VBAAHH中的传递记录集从SQL Server获取它。我以前从未这样做过…从VBA调用SQL Server。我想是时候离开我舒适的VBA外壳了。似乎我需要打开与SQL的连接,然后查询表。我会尝试一下的,谢谢!不,您不必离开VBA部分,除非某个对access一无所知的人尝试在没有任何知识的情况下提出有关access的建议。当表单保存记录时,自动编号ID在表单记录集中可用,并且该值可以像该表单中的任何其他列(me!ID)一样被引用。这里唯一令人困惑的是,为什么在保存记录时表单会从记录中移出——它不应该这样做。此类表还应具有时间戳列(sql rowversion)。至于如何在绑定表单中执行select命令,这个问题是不需要的。该命令不应将表单移出记录。你最好用if me.Dirty=True然后用me.Dirty=false。