Como obter a identificação do registro recém-inserido usando o Excel VB
Parece um problema bastante comum, mas a maioria das soluções se refere à concatenação de vários comandos SQL, algo que acredito que não pode ser feito com o ADO / VBA (ficarei feliz em ser mostrado errado a esse respeito
Atualmente, insiro meu novo registro e, em seguida, execute uma consulta de seleção usando (espero) campos suficientes para garantir que apenas o registro recém-inserido possa ser retornado. Meus bancos de dados raramente são acessados por mais de uma pessoa por vez (risco insignificante de outra inserção entre consultas) e, devido à estrutura das tabelas, identificar o novo registro normalmente é bastante fáci
Agora estou tentando atualizar uma tabela que não tem muito espaço para exclusividade, além da chave primária artificial. Isso significa que existe o risco de o novo registro não ser exclusivo, e eu detesto adicionar um campo apenas para forçar a exclusividad
Qual é a melhor maneira de inserir um registro em uma tabela do Access e consultar a nova chave primária do Excel nessa situaçã
Obrigado pelas respostas. Eu tentei obter@@IDENTITY
funcionando, mas isso sempre retorna 0 usando o código abaix
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
Algo se destaca por ser responsável?
No entanto, dadas as advertências prestadas por Renaud (abaixo), parece haver tanto risco quanto o uso de@@IDENTITY
como em qualquer outro método, por isso recorri ao uso deSELECT MAX
por enquanto. Para referência futura, eu estaria interessado em ver o que está errado com minha tentativa acima.