Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Contribuez
Contribuez Access : Vos contributions. Postez ici vos codes sources, conseils, astuces et autres propositions. Ce forum n'est pas un forum technique mais destiné aux contributions pour www.developpez.com
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/04/2008, 01h13   #1
Membre Expert
 
Inscription : mars 2006
Messages : 1 331
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 1 331
Points : 1 460
Points : 1 460
Par défaut Réinitialiser un champ de type numéro auto

Bonjour,

Pour réinitialiser un NumAuto j'ai cherché, certainement trés mal, mais je n'ai rien trouvé pour remettre à zéro un auto-increment à l'aide de quelques lignes de code.

La table-->"Tbl_Demo" Le champ de type numéro auto-->Id_Clef :
Code :
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
Private Sub CmdSup_Click()
On Error Resume Next
 
Dim Rst As DAO.Recordset
Dim StrCritere As String
 
 StrCritere = "SELECT * FROM Tbl_Demo"
 Set Rst = CurrentDb.OpenRecordset(StrCritere, dbOpenDynaset)
 
' On supprime toutes les données de la table
 Rst.MoveFirst
 Do Until Rst.EOF
    Rst.Edit
    Rst.Delete
 Rst.MoveNext
Loop
 
' Mise à zéro du compteur 
    Rst.AddNew
    Rst!Id_Clef = 0     '99 pour débuter à 100 
    Rst.Update
 
' On élimine ce 0 prohibé, voir 99
 Rst.MoveFirst
  Do Until Rst.EOF
    Rst.Edit
    Rst.Delete
  Rst.MoveNext
 Loop
 
End Sub
Cordialement.
__________________
Questions techniques par MP
Le peu que je sais, c'est à mon ignorance que je le dois.
...............................................................................Sacha Guitry
francishop est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2008, 10h37   #2
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 887
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 887
Points : 10 742
Points : 10 742
Envoyer un message via MSN à jpcheck
salut,
je pense que sinon, un
suivi d'un compactage de la base fonctionne.
Toutefois, tu ne pourras pas le faire si des liaisons existent avec d'autres tables.
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2008, 16h22   #3
Membre Expert
 
Inscription : mars 2006
Messages : 1 331
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 1 331
Points : 1 460
Points : 1 460
Bonjour,

Citation:
Envoyé par jpcheck Voir le message
Toutefois, tu ne pourras pas le faire si des liaisons existent avec d'autres tables.
Si on doit supprimer les données de plusieurs tables liées, il faut commencer par les tables secondaires et terminer par les tables principales des liaisons.
Par contre,cet ordre ne s'avère pas indispensable avec des tables liées.

Citation:
Envoyé par jpcheck Voir le message
je pense que sinon, un
suivi d'un compactage de la base fonctionne.
L'intérêt de ces quelques lignes de code, que j'ai hésité à mettre en ligne, est justement de ne pas fermer la base. Ce qui peut aider à l'occasion.

Cordialement.
__________________
Questions techniques par MP
Le peu que je sais, c'est à mon ignorance que je le dois.
...............................................................................Sacha Guitry
francishop est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2010, 17h51   #4
Futur Membre du Club
 
Cyrille Godreau
Inscription : mars 2010
Messages : 22
Détails du profil
Informations personnelles :
Nom : Cyrille Godreau

Informations forums :
Inscription : mars 2010
Messages : 22
Points : 18
Points : 18
Sinon tu peux utiliser la procédure suivante :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dim SQL As String
 
'Purge des enregistrements de la table "Tbl_NumAuto"
SQL = "DELETE * FROM Tbl_NumAuto"
DoCmd.RunSQL SQL
 
'Copie en "Tbl_NumAuto_Copy" de la table "Tbl_NumAuto" où le numero auto est à ré-incrémenter
DoCmd.CopyObject , "Tbl_NumAuto_Copy", acTable, "Tbl_NumAuto"
 
'Suppression des tables "Tbl_NumAuto"
DoCmd.DeleteObject acTable, "Tbl_NumAuto"
 
'Renommage de la table "Tbl_NumAuto_Copy" en "Tbl_NumAuto"
DoCmd.Rename "Tbl_NumAuto", acTable, "Tbl_NumAuto_Copy"
cyrgod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2010, 11h06   #5
Membre expérimenté
 
Inscription : juillet 2005
Messages : 555
Détails du profil
Informations personnelles :
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : juillet 2005
Messages : 555
Points : 578
Points : 578
Par défaut Inscrutation

Bonjour à tous,

Si je peux me permettre de donner mon avis sur la question des numauto qui revient souvent et poser une question.

Je créé un champ "chrono" dans la table que j'incrémente avec une fonction qui comble les trous ou ajoute +1 sur le champ.

Sinon je ne vois pas l'intérêt de réinitialiser les champs numauto et j'aimerai bien savoir dans quel cas de figure a-t-on besoin de le faire ?

a+
naphta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2010, 18h31   #6
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 941
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 941
Points : 6 283
Points : 6 283
Bonjour,

Voila la comment je procède avec une table dont le champ clé RowNum est NuméroAuto :
Code :
1
2
3
4
5
6
7
8
9
10
' Vider Table
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE FROM LaTable;"
DoCmd.SetWarnings True
' Enlever clé primaire
DoCmd.RunSQL "ALTER TABLE LaTable DROP CONSTRAINT PrimaryKey ;"
' Modifier type champ Numauto -> Long
DoCmd.RunSQL "ALTER TABLE LaTable ALTER COLUMN [RowNum] Long ;"
' Modifier type champ Long -> NumAuto et remettre clé primaire
DoCmd.RunSQL "ALTER TABLE LaTable ALTER COLUMN [RowNum] Counter (1,1) CONSTRAINT PrimaryKey PRIMARY KEY ;"
A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 11h50   #7
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 941
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 941
Points : 6 283
Points : 6 283
Bonjour,

Apparemment on peut faire plus court (en tout cas depuis Access 2003)
Code :
1
2
DoCmd.RunSQL "DELETE FROM LaTable"
DoCmd.RunSQL "ALTER TABLE LaTable ALTER COLUMN [RowNum] COUNTER(1,1)"
Cdlt.
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/01/2012, 17h37   #8
Invité régulier
 
Inscription : septembre 2007
Messages : 25
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2007
Messages : 25
Points : 6
Points : 6
Citation:
Envoyé par naphta Voir le message
Bonjour à tous,

Si je peux me permettre de donner mon avis sur la question des numauto qui revient souvent et poser une question.

Je créé un champ "chrono" dans la table que j'incrémente avec une fonction qui comble les trous ou ajoute +1 sur le champ.

Sinon je ne vois pas l'intérêt de réinitialiser les champs numauto et j'aimerai bien savoir dans quel cas de figure a-t-on besoin de le faire ?

a+
Je peux repondre a cette question !! je viens de creer une base un peu compliquer (pour moi !) et j'ai fait pas mal d'essai avant d'arriver a ce que je voulais. resultat mon numéro auto est a 40 et je veux revenir à 1 pour mettre la base en service et je dois dire que les lignes de codes c'est pas forcement mon truc !!
steph31250 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 18h45   #9
Expert Confirmé
 
Avatar de vodiem
 
Homme Diem VO
Vivre
Inscription : avril 2006
Messages : 2 644
Détails du profil
Informations personnelles :
Nom : Homme Diem VO
Âge : 40
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Vivre
Secteur : Conseil

Informations forums :
Inscription : avril 2006
Messages : 2 644
Points : 3 897
Points : 3 897
Citation:
Envoyé par naphta
Sinon je ne vois pas l'intérêt de réinitialiser les champs numauto et j'aimerai bien savoir dans quel cas de figure a-t-on besoin de le faire ?
bien que cela date...
réajuster l'auto incrément c'est utile après des tests pendant la conception mais aussi modification, donc pas forcement pour remettre à zéro.
mais c'est aussi utile pour le cas de bug sur l'auto incrément qui peut repartir sur une valeur antérieur.
ms fourni un exemple pour produire cette erreur ici.

le compactage remets à zéro l'auto incrément mais seulement si la table est vide. de plus la commande sql ne marche pas quand la table est liée dans la fenêtre des relations.
étant amener à faire parfois cette manip j'ai donc fait un script pour réaliser cela automatiquement.

Citation:
Envoyé par steph31250
je dois dire que les lignes de codes c'est pas forcement mon truc !!
moi si mais c'est vite ch... ^^ vous trouverez le script ici.
il y aura un maj bientot pour résoudre un cas particulier d'erreur qui peut se produire. n'es ce pas LedZeppII ? ;P

vodiem est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h45.


 
 
 
 
Partenaires

Hébergement Web