似乎这是一个常见的问题,但大多数解决方案是指连接多个SQL命令,我相信不能用ADO/VBA完成(但我很乐意在这方面显示错误)。如何使用Excel VBA获取新插入记录的ID?
我目前插入我的新记录,然后运行一个选择查询使用(我希望)足够的字段,以保证只有新插入的记录可以返回。我的数据库很少一次被多个人访问(查询之间发生另一次插入的风险可以忽略不计),并且由于表的结构,识别新记录通常非常容易。
我现在试图更新一个没有太多的唯一性范围的表,而不是人造主键。这意味着新的记录可能并不是独一无二的,我不愿意添加一个字段来强制唯一性。
在这种情况下,将记录插入到Access表中然后从Excel中查询新的主键的最佳方法是什么?
感谢您的回复。我试图让@@IDENTITY
工作,但是这总是使用下面的代码返回0。
Private Sub getIdentityTest()
Dim myRecordset As New ADODB.Recordset
Dim SQL As String, SQL2 As String
SQL = "INSERT INTO tblTasks (discipline,task,owner,unit,minutes) VALUES (""testDisc3-3"",""testTask"",""testOwner"",""testUnit"",1);"
SQL2 = "SELECT @@identity AS NewID FROM tblTasks;"
If databaseConnection Is Nothing Then
createDBConnection
End If
With databaseConnection
.Open dbConnectionString
.Execute (SQL)
.Close
End With
myRecordset.Open SQL2, dbConnectionString, adOpenStatic, adLockReadOnly
Debug.Print myRecordset.Fields("NewID")
myRecordset.Close
Set myRecordset = Nothing
End Sub
什么东西突出负责?
但是,考虑到由Renaud(下文)提供的有用注意事项,使用@@IDENTITY
与其他任何方法相比,似乎具有几乎同样的风险,所以我暂时使用SELECT MAX
。为了将来的参考,虽然我会有兴趣看看我上面的尝试有什么问题。
使用`Max`可能会很棘手......如果别人插入记录,它可能会给你另一个记录的ID。如果您是唯一一个插入记录,请继续。 – 2013-05-26 03:48:41