这似乎是一个很常见的问题,但大多数解决方案都涉及连接多个 SQL 命令,我相信这是 ADO/VBA 无法完成的(不过,我很高兴在这方面被证明是错误的)。
我当前插入新记录,然后使用(我希望)足够的字段运行选择查询,以保证仅返回新插入的记录。我的数据库很少同时被多个人访问(查询之间发生另一次插入的风险可以忽略不计),并且由于表的结构,识别新记录通常非常容易。
我现在正在尝试更新一个表,除了人工主键之外,该表没有太大的唯一性范围。这意味着存在新记录可能不唯一的风险,并且我不愿意仅仅为了强制唯一性而添加字段。
在这种情况下,将记录插入 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
目前。为了将来的参考,我有兴趣看看我上面的尝试有什么问题。