Parece un problema bastante común esto, pero la mayoría de las soluciones se refieren a concatenar múltiples comandos SQL, algo que creo que no se puede hacer con ADO/VBA (sin embargo, me complacerá que se muestre mal al respecto).¿Cómo obtener la identificación del nuevo registro insertado usando Excel VBA?
Actualmente inserto mi nuevo registro y luego ejecuto una consulta de selección utilizando (espero) suficientes campos para garantizar que solo se pueda devolver el registro recién insertado. Raramente se accede a mis bases de datos por más de una persona a la vez (riesgo insignificante de que se realice otra inserción entre consultas) y debido a la estructura de las tablas, identificar el nuevo registro es normalmente bastante fácil.
Estoy tratando de actualizar una tabla que no tiene mucho alcance para la unicidad, que no sea la clave primaria artificial. Esto significa que existe el riesgo de que el nuevo registro no sea único y me da pena agregar un campo solo para forzar la exclusividad.
¿Cuál es la mejor manera de insertar un registro en una tabla de Access y luego consultar la nueva clave primaria de Excel en esta situación?
Gracias por las respuestas. Intenté que @@IDENTITY
funcionara, pero esto siempre devuelve 0 utilizando el siguiente código.
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
Cualquier cosa se destacan ser responsable?
Sin embargo, dadas las advertencias proporcionadas amablemente por Renaud (abajo) parece casi tanto riesgo con el uso de @@IDENTITY
al igual que con cualquier otro método, por lo que he recurrido a la utilización de SELECT MAX
por ahora. Sin embargo, para referencia futura, me interesaría ver qué está mal con mi intento anterior.
usando 'Max' puede ser complicado ... si otra persona es la inserción de registros, puede darle Identificación de otro registro. Si usted es el único que está insertando registros, continúe. –