Reset d'un numéro auto dans Access [Résolu]

sifflet_ 72 Messages postés mardi 25 juillet 2006Date d'inscription 2 mai 2007 Dernière intervention - 2 août 2006 à 17:28 - Dernière réponse : sifflet_ 72 Messages postés mardi 25 juillet 2006Date d'inscription 2 mai 2007 Dernière intervention
- 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
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
sifflet_ 72 Messages postés mardi 25 juillet 2006Date d'inscription 2 mai 2007 Dernière intervention - 3 août 2006 à 09:13
3
Merci
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

Merci sifflet_ 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Commenter la réponse de sifflet_
Dolphin Boy 630 Messages postés vendredi 5 mai 2006Date d'inscription 17 février 2007 Dernière intervention - 2 août 2006 à 18:59
0
Merci
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
Commenter la réponse de Dolphin Boy
Molenn 797 Messages postés mardi 7 juin 2005Date d'inscription 23 février 2011 Dernière intervention - 2 août 2006 à 22:07
0
Merci
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
Commenter la réponse de Molenn
sifflet_ 72 Messages postés mardi 25 juillet 2006Date d'inscription 2 mai 2007 Dernière intervention - 3 août 2006 à 07:27
0
Merci
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
Commenter la réponse de sifflet_
Molenn 797 Messages postés mardi 7 juin 2005Date d'inscription 23 février 2011 Dernière intervention - 3 août 2006 à 13:57
0
Merci
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
Commenter la réponse de Molenn
sifflet_ 72 Messages postés mardi 25 juillet 2006Date d'inscription 2 mai 2007 Dernière intervention - 3 août 2006 à 16:40
0
Merci
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
Commenter la réponse de sifflet_

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.