Sql 使用@@Identity

Sql 使用@@Identity,sql,ms-access,ms-access-2007,vba,Sql,Ms Access,Ms Access 2007,Vba,我想知道如何从另一个db中的表中获取最近生成的autonumber值。目前我正在这样做: Do直到rsA.EOF '在此处插入新行(有效) Set rs=New ADODB.Recordset rs.打开“选择@@Identity”(连接信息) SQLcmd=“UPDATE tbl SET col=“&rs(“选择@@Identity”)。值&” (凡有声明者);” DoCmd.runsqlcmd rsA.MoveNext 环 但是它给col一个值0,而不是新生成的autonumber。 知道

我想知道如何从另一个db中的表中获取最近生成的autonumber值。目前我正在这样做:

Do直到rsA.EOF
'在此处插入新行(有效)
Set rs=New ADODB.Recordset
rs.打开“选择@@Identity”(连接信息)
SQLcmd=“UPDATE tbl SET col=“&rs(“选择@@Identity”)。值&”
(凡有声明者);”
DoCmd.runsqlcmd
rsA.MoveNext
环
但是它给col一个值0,而不是新生成的autonumber。
知道为什么吗?还是另一种方法?

您没有显示将
插入另一个数据库的代码。如果使用ADO连接对象的
Execute
方法来执行此操作,请从同一连接对象运行
SELECT@@Identity
查询。。。不是具有相同连接字符串的新连接<代码>@@Identity
仅在同一连接会话中可用;否则您将得到0

实际上,您甚至不需要记录集来捕获该值。如果您的连接对象名为
conn
,这将返回一个记录集,但您无需将其分配给记录集对象变量。只需从返回的记录集中请求第一项

Debug.Print "most recent autonumber: " & _
    conn.Execute("SELECT @@Identity")(0)

看+1比我快。正如@HansUp所说,关键是使用相同的连接,而不仅仅是相同的连接字符串。当我运行conn.Execute(…)时,它返回0。如果您从ADO连接对象执行
INSERT
,并且稍后从同一连接对象
SELECT@@Identity
,这应该不是问题。我的答案中的代码是在Access 2007中测试的。我没有显示插入的
命令,但如果有帮助,我可以显示。我正在将命令保存为字符串并使用runcmd.runSQL。这不起作用吗?
RunSQL
不使用ADO连接。您很可能从当前数据库中获取了0作为最后一个标识值。。。不是从你插入的另一个数据库。