关于这个问题有几个答案,但我的问题是关于我拥有的特定代码。
我正在尝试获取在 VBA 代码上执行的此查询的最后插入 ID。
Public Function Execute(cQry As excfw_dbQuery) As ADODB.Recordset
If pConn.State = 0 Then
OpenConnection
End If
qry = "INSERT INTO [some really long query, which actually works]; SELECT SCOPE_IDENTITY()"
On Error Resume Next
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open qry, pConn 'also tried with adOpenKeyset, adLockOptimistic
'some error handling code which is not related to the issue
Set rs = rs.NextRecordset() 'also tried without moving onto the next recordset
pInsertedId = rs.Fields(0).Value
Set Execute = rs 'this is just to pass the query result for SELECT queries
End Function
这应该将最后插入的 ID 保存在 pInsertedId 变量上,但每次插入一行时我都会得到 0。奇怪的是,当我将相同的代码复制并粘贴到 SSMS 中时,它可以工作。
我可能只是将一些独特的数据插入到数据库的一些未使用的列中并通过它进行查询。
- 更新 -
我刚刚注意到,在运行 SELECT 查询时, rs 对象保持打开状态,直到超出范围。以下是观看部分的截图:
相反,在插入语句上,它会在执行查询后立即关闭:

