Reset d'un numéro auto dans Access

Résolu
sifflet_ Messages postés 70 Date d'inscription mardi 25 juillet 2006 Statut Membre Dernière intervention 2 mai 2007 - 2 août 2006 à 17:28
sifflet_ Messages postés 70 Date d'inscription mardi 25 juillet 2006 Statut Membre Dernière intervention 2 mai 2007 - 3 août 2006 à 16:40
Salut à tous!

Je suis dans Access XP et en faisant une recherche, je suis arrivé ici. ça répond plus-ou-moins à ma question.


En fait, j'ai une table avec un numéro Automatique comme clé primaire.
Si l'utilisateur choisit de vider cette table, j'aimerai que quand la
table va se re-remplir, les numéros repartent de 1. Dans le sujet, il
est dit de compacter la base de données. J'ai essayé et effectivement,
c'est le cas, mais comment le faire par le code ?


J'ai regardé dans l'help de VB les fonctions "CompactRepair" ou 
"CompactDatabase", il ne me semble pas que c'est possible de le faire
avec la base de données courante. ou alors j'ai rien capté ?
Auriez-vous un petit exemple de code ?


Merci d'avance à tous et contrairement aux messages habituels, CE N'EST
PAS URGENT :-) Mais bon, j'aimerai quand même une réponse avant le
siècle prochain, si possible !


Meilleures salutations à tous et bonne soirée!

Sifflet

6 réponses

sifflet_ Messages postés 70 Date d'inscription mardi 25 juillet 2006 Statut Membre Dernière intervention 2 mai 2007
3 août 2006 à 09:13
Salut!

Désolé de vous avoir embêté avec mes histoires!


Finalement, j'ai changé le champ de numéro Auto en integer. j'ai ajouté
une boucle qui compte le nombre d'enregistrements dans la table et qui
va ré-écrire par dessus de 1 à compteur...


J'aurai dû plus réfléchir au début et ne pas mettre de numéro auto... Vu que je remplis la table qu'à un seul endroit.


Merci quand même de vous être donné la peine de me répondre!


Meilleures salutations!

Sifflet
3
Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007
2 août 2006 à 18:59
Salut, en vb6 avec access, avant de compacter par code il faut fermer la base avant et donc que personne d'autre ne l'utilise à ce moment. J'ai retrouver un bout de code qui fait ça :

Sub CompacterBase()

db.Close 'fermeture de la base de données
set db = Nothing
' Vérifie que les fichiers temporaires sont bien effacés
If Dir(App.Path & "\Temp.mdb") <> "" Then Kill App.Path & "\Temp.mdb"
If Dir(App.Path & "\Temp.svg") <> "" Then Kill App.Path & "\Temp.svg"

On Error GoTo trt_erreur

' Sauvegarde de la base avant toute opération
FileCopy BaseDonnees, App.Path & "\Temp.svg"
' Compactage de la base de données
CompactDatabase App.Path & "\mabase.mdb", App.Path & "\Temp.mdb"

If Dir(App.Path & "Temp.mdb") <> "" Then
' Suppression de la base non compactée
Kill App.Path & "\mabase.mdb"
' Renommage de la base compactée
Name App.Path & "\Temp.mdb" As App.Path & "\mabase.mdb"
' Puisque tout s'est bien passé, destruction de la sauvegarde
Kill App.Path & "\Temp.svg"
End If

Exit Sub

trt_erreur:

'MsgBox "Impossible de compacter la base !" & Chr$(13) & Err.Description

End Sub
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
2 août 2006 à 22:07
Si tu es obligé de fermer la base, c'est aussi simple de cocher l'option dans ACCESS : Compacter à la fermeture ou un nom approchant (dans le menu Outils\Options de mémoire).

Dans ton caode, tu fermes juste la base après avoir vidé la table et hop, remise à zéro.

De toutes façons, il me semble qu'on ne peut pas compacter de base si un formulaire, une table ou une requête (ou un état oui hein, je ne vais pas tous les mettre :p) est ouvert. Tu es obligé de fermer tout et de ne conserver que la base brute donc ...

Molenn
0
sifflet_ Messages postés 70 Date d'inscription mardi 25 juillet 2006 Statut Membre Dernière intervention 2 mai 2007
3 août 2006 à 07:27
Salut!


Merci aux 2 pour vos réponses. Je pense pouvoir partir dans les 2
directions, mais dans les 2 cas, il me faudrait quelques précisions.

Molenn> j'ai déjà coché l'option et en
plus le formulaire sur lequel j'aimerais arriver se charge
automatiquement au démarrage de la base. Donc, je pourrais faire
simplement fermer, puis ré-ouvrir Access, mais comment?

Je fais DoCmd.Quit (acQuitSaveAll) quand je quitte Access, ça pourrait
jouer? Il faut mettre quoi pour la réouvrir? Doit-on récupérer le
chemin du fichier pour la relancer?

Dolphin> comment dois-je déclarer mes variables?

db, je suppose as Database, mais je pense qu'il faut faire un Set
après? Il y a un problème que j'ai oublié de préciser: c'est que ma
base sera distribuée sur le disque réseau personnel de plusieurs
utilisateurs, donc pour chaque personne un chemin de fichier différent.
Comment remplir "correctement" App.Path ? Autre chose, si l'utilisateur
change le nom (renomme) de la base de données, y a-t-il moyen de
récupérer son nom, plutôt que de mettre un nom en dur dans le code (ça
c'est moins important, remarque)?


Enfin, plus j'y réfléchis, plus la solution de Molenn me semble la plus
simple dans ce cas. Désolé, si je vous embête trop, mais je suis assez
à la rue avec ce genre de choses proche du système.


En tout cas merci déjà de vos réponses et bonne continuation dans vos développements respectifs!

Sifflet
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
3 août 2006 à 13:57
Pour répondre à la question qui m'est posée : Tu ne peux pas le gérer par code si tu es dans un formulaire ACCESS de cette façon.
En effet, avec le DoCmd.Quit, effectivement, tu vas bien fermer la base et déclencher le compactage, mais tu ne pourras pas la ré-ouvrir : Avec le DoCmdQuit, le reste du code ne sera pas interprété (normal : l'appli est fermée).

Ca dépend de ta base en fait : si tu peux permettre que la base soit vide (pour gagner un peu de place sur le réseau, et si le contenu de la base n'a pas à être stocké une fois traité), tu peux rajouetr un code à la fermture de l'appli : quand l'utilisateur quitte, ça va vider la table et donc par extension, compacter pour la prochaine utilisation.
Mais ce n'est peut-être pas applicable à ta base.

Molenn
0
sifflet_ Messages postés 70 Date d'inscription mardi 25 juillet 2006 Statut Membre Dernière intervention 2 mai 2007
3 août 2006 à 16:40
Merci pour les précisions!

En fait dans mon cas, l'objectif est que les données restent stockées
dans les tables, donc aussi quand on quitte l'application. Par contre,
l'utilisateur peut vider les tables par un clic sur un bouton et
ré-importer des nouvelles données dans ces mêmes tables. Alors
justement si tu importe, vide la table et ré-importe sans fermer
Access, ben il reprend le compteur Auto où il en était => pas à 0.
et ça me faisait planter l'étape suivante qui était le traitement des
données...


En tout cas, c'est sympa d'avoir pris un peu de temps!

Salut A+

Sifflet
0
Rejoignez-nous