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 31 32 33 34 35 36 37 38 39 40
|
'Pour exécuter ce code il faut activer la référence : Microsoft DAO 3.x Object Library
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
' Code originel
'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) );"
'Code modifié (ne marche pas)
'Chaîne SQL en fonction de LeChamp et de LaTable, retournant NULL ou le numéro du trou
sSQL = "Select Min(Right([" & LeChamp & "], 3) -1) As NextID From [" & LaTable & "] As T1 "
sSQL = sSQL & "Where (((Right([" & LeChamp & "], 3) -1)>0) And (((Select Right([" & LeChamp & "], 3) "
sSQL = sSQL & "From [" & LaTable & "] As T2 "
sSQL = sSQL & "Where Clng(Right(T2.[" & LeChamp & "], 3))=Clng(Right(T1.[" & LeChamp & "], 3)) -1)) Is Null));"
Set rs = CurrentDb.OpenRecordset(sSQL, dbOpenSnapshot)
'Nbre d'enregistrements dans laTable
n = DCount("Right([" & LeChamp & "], 3)", "[" & 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("Right([" & LeChamp & "], 3)", "[" & LaTable & "]") + 1
Else
NextID = rs(0) 'Sinon, il y a un trou. Renvoyer la valeur du trou
End If
End Function |
Partager