Кажется, это достаточно распространенная проблема, но большинство решений относится к объединению нескольких команд 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
Что-нибудь выделяется, будучи ответственным?
Однако, учитывая предостережения, предоставленные Рено (ниже), кажется, что использование @@IDENTITY
кажется почти таким же рискованным, как и любым другим методом, поэтому я прибегнул к использованию SELECT MAX
сейчас. Для дальнейшего использования, хотя мне было бы интересно узнать, что не так с моей попыткой выше.