这似乎是一个很常见的问题,但大多数解决方案都是指连接多个 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
现在只好使用了。以供将来参考,尽管我很想看看我上面的尝试有什么问题。