Obtenir le dernier NuméroAuto attribué
Par Hervé Inisan le mardi 15 décembre 2009, 17:27 - Requêtes SQL et VBA - Lien permanent
J'exécute une instruction SQL de type
INSERTpour ajouter des lignes dans une table. La clef primaire de cette table est un NuméroAuto. Comment connaître la valeur du NuméroAuto qui vient d'être inséré ?
Le code de départ
Voici par exemple un bout de code qui crée un enregistrement dans une table tblPersonnes :
' INSERTION D'UN ENREGISTREMENT
' ---
Sub CreerPersonne()
Dim strSQL As String
' Création d'une personne
strSQL = "INSERT INTO [tblPersonnes] (Nom, Prénom)" _
& " VALUES ('Inisan', 'Hervé')"
CurrentDb.Execute strSQL
End Sub
La table tblPersonnes contient 3 champs : Nom, Prénom, et ID. Ce dernier est de type NuméroAuto. Comme il se calcule automatiquement, il ne figure pas dans l'instruction SQL. Mais du coup, comment peut-on récupérer ce numéro ? L'intérêt serait d'ajouter des données dans une autre table liée à la table Personnes, ou d'ouvrir un formulaire ou un état en le filtrant sur le nouveau numéro, après l'insertion...
La solution
Recopiez la fonction qui suit dans un module standard d'Access :
' EXTRACTION DU DERNIER NUMEROAUTO ATTRIBUE
' ---
Function DernierNumeroAuto() As Long
Dim rst As DAO.Recordset
Dim strSQL As String
' Instruction SQL pour extraire le dernier NuméroAuto attribué
strSQL = "SELECT @@IDENTITY AS Numero;"
' Ouvrir un Recordset pour lire la valeur
Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
DernierNumeroAuto = rst("Numero")
' On ferme !
rst.Close
Set rst = Nothing
End Function
La fonction fait appel à @@IDENTITY, qui donne en SQL le dernier NuméroAuto calculé.
On teste !
Voici maintenant comment aménager le code du départ, pour qu'il insère une ligne dans la table Personnes, et qu'il obtienne le NuméroAuto associé juste après :
' INSERTION D'UN ENREGISTREMENT
' ---
Sub CreerPersonne()
Dim strSQL As String
Dim lngNumero As Long
' Création d'une personne
strSQL = "INSERT INTO [tblPersonnes] (Nom, Prénom)" _
& " VALUES ('Inisan', 'Hervé')"
CurrentDb.Execute strSQL
' Affichage du NuméroAuto attribué
lngNumero = DernierNumeroAuto()
MsgBox "Dernier numéro attribué : " & lngNumero
End Sub
Pour tester ce bout de code, ouvrez la fenêtre de debug (CTRL + G), et tapez-y :CreerPersonne et appuyez sur la touche [Entrée].
Vous pouvez aussi placer votre curseur dans le bloc de code VBA, et cliquer sur l'icône Exécuter Sub/UserForm.





Nouveau !
Commentaires