1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| Function NextID(LeChamp As String, LaTable As String) As Long
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'Fonction renvoyant le prochain Identifiant, en fonction des valeurs existantes dans une table.
'Arguments :
' LeChamp => Nom du champ Identifiant numérique Long concerné
' LaTable => Nom de la table contenant cet identifiant
'Retour :
' 1 s'il n'y a rien dans la table
' Le Nombre maximum +1 s'il y a une suite ininterrompue de nombres
' La valeur du nombre manquant en cas de trou.
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Dim sSQL As String
Dim rs As DAO.Recordset
Dim n As Long
'Chaîne SQL en fonction de LeChamp et de LaTable, retournant NULL ou le numéro du trou
sSQL = "Select Min([" & LECHAMP & "]-1) As NextID From " & LATABLE & " As T1 "
sSQL = sSQL & "Where ((([" & LECHAMP & "]-1)>0) And (((Select [" & LECHAMP & "] "
sSQL = sSQL & "From " & LATABLE & " T2 "
sSQL = sSQL & "Where T2.[" & LECHAMP & "]=T1.[" & LECHAMP & "]-1)) Is Null));"
Set rs = CurrentDb.OpenRecordset(sSQL, dbOpenSnapshot)
'Nbre d'enregistrements dans laTable
n = DCount("[" & LeChamp & "]", "[" & LaTable & "]")
If n = 0 Then 'S'il n'y a pas d'enregistrements, mettre 1
NextID = 1
ElseIf IsNull(rs(0)) Then 'Si la requête ne renvoie rien, incrémenter de 1 le maximum
NextID = DMax("[" & LeChamp & "]", "[" & LaTable & "]") + 1
Else
NextID = rs(0) 'Sinon, il y a un trou. Renvoyer la valeur du trou
End If |
Partager