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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| Définissez AutoNumbers pour commencer à partir de ...
La réinitialisation d' un numéro automatique à 1 est simple: supprimez les enregistrements et compactez la base de données.
Mais comment forcez- vous un numéro automatique à démarrer à partir d'une valeur spécifiée? L'astuce consiste à importer un enregistrement avec un de moins que le nombre souhaité, puis à le supprimer. Le sous-suivant effectue cette opération. Par exemple, pour forcer la table "tblClient" à commencer la numérotation à partir de 7500, entrez:
Appelez SetAutoNumber ("tblClient", 7500)
Sub SetAutoNumber (sTable As String, ByVal lNum As Long)
En cas d'erreur GoTo Err_SetAutoNumber
'Objectif: définir le champ NuméroAuto dans sTable pour commencer à lNum.
'Arguments: sTable = nom de la table à modifier.
'lNum = le nombre à partir duquel vous souhaitez commencer.
'Exemple d'utilisation: appeler SetAutoNumber ("tblInvoice", 1000)
Dim db As DAO.Database ' Current db.
Dim tdf As DAO.TableDef 'TableDef of sTable.
Dim i As Integer 'Loop counter
Dim fld As DAO.Field ' Champ de table.
Dim sFieldName As String 'Nom du champ NuméroAuto.
Dim vMaxID As Variant 'Current Maximum AutoNumber value.
Dim sSQL As String 'Append / Delete string de requête.
Dim sMsg As String 'MsgBox string.
lNum = lNum - 1 'Attribuer à 1 de moins que la valeur souhaitée.
'Localisez le champ d'incrémentation automatique de cette table.
Définir db = CurrentDb ()
Définissez tdf = db.TableDefs (sTable)
Pour i = 0 À tdf.Fields.Count - 1
Définissez fld = tdf.Fields (i)
Si fld.Attributes Et dbAutoIncrField Alors
sFieldName = fld.name
Quitter pour
Fin si
Prochain
Si Len (sFieldName) = 0 Alors
sMsg = "Aucun champ NuméroAuto trouvé dans la table" "" & sTable & "" "."
MsgBox sMsg, vbInformation, "Cannot set AutoNumber"
Autre
vMaxID = DMax (sFieldName, sTable)
Si IsNull (vMaxID) Alors vMaxID = 0
Si vMaxID> = lNum Then
sMsg = "Fournissez un plus grand nombre." "" & sTable & "." & _
sFieldName & "" "contient déjà la valeur" & vMaxID
MsgBox sMsg, vbInformation, "Trop bas".
Autre
' Insérez et supprimez l'enregistrement.
sSQL = "INSERT INTO" & sTable & "([" & sFieldName & "]) SELECT" & lNum & "AS lNum;"
db.Execute sSQL, dbFailOnError
sSQL = "DELETE FROM" & sTable & "WHERE" & sFieldName & "=" & lNum & ";"
db.Execute sSQL, dbFailOnError
Fin si
Fin si
Exit_SetAutoNumber:
Quitter sous
Err_SetAutoNumber:
MsgBox "Error" & Err.Number & ":" & Err.Description,, "SetAutoNumber ()"
Reprendre Exit_SetAutoNumber
End Sub |
Partager