Acceda a VBA: busque el número máximo en la columna y agregue 1

En mi base de datos de Access, tengo una tabla llamada “Demande”. Quiero leer todos los registros en la columna “Numero de Commande” y leer el número más grande en la columna para poder usar ese número para el próximo nuevo registro.

Así que aquí está mi mesa:

Cuadro de cuadro

El índice clave es para el Numero de Commande.

y aquí está mi código actualmente:

Dim highestInt as Integer Dim newNumeroCommande as Integer Set currentDatabase = CurrentDb Set rstDemande = currentDatabase.OpenRecordset("Demande") ' Find the highest integer in the column "Numero de Commande" newNumeroCommande = highestInt + 1 rstDemande.AddNew rstDemande("Numero de Commande").Value = newNumeroCommande rstDemande.Update 

Gracias por toda ayuda

Siempre que la columna solo contenga valores numéricos sin alfa, puede usar:

 NewNumeroCommande = Dmax("[Numero de Commande]", "Demande") + 1 

Nota: Este no es mi método recomendado, sino solo una opción incorporada de Access; de ser posible, puede ahorrarse la molestia al usar Autonumeración o, alternativamente, puede tener una tabla “contador” separada que registre el número de registro más alto, cuando Si desea crear otro, puede bloquear esta tabla, boost el valor en uno (y luego usar esto) y luego liberar el locking, esto sería más efectivo en un entorno multiusuario.

Algunas notas sobre cómo obtener un número de secuencia. Esto requiere una referencia a la Biblioteca de Microsoft ActiveX Data Objects xx

Números secuenciales

 Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim strSQL As String Dim lngResult As Long Dim strCon As String lngResult = 0 'assume fail strCon = "Provider=" ''Connection to back-end cn.Open strCon rs.CursorType = adOpenKeyset rs.LockType = adLockPessimistic rs.CursorLocation = adUseServer ''Where BEInfo is a single line table strSQL = "SELECT ASeqNumber FROM BEInfo" rs.Open strSQL, cn, , , adCmdText 'Note this is ADO, so no rs.Edit rs!ASeqNumber = rs!ASeqNumber + 1 rs.Update lngResult = rs!ASeqNumber ''This should not happen, but just to be sure If DCount("ASeqNumber", "Table", "ASeqNumber=" & lngResult) > 0 Then lngResult = 0 End If