似乎這是一個常見的問題,但大多數解決方案是指連接多個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