Merci à vous deux, ca fonctionne correctement :)
J'en profite pour vous poser une petite question: sauriez-vous comment réinitialiser la clé primaire de la table Access ? car l'ID ne se remet pas à 0 lorsque je demande le delete all.
Version imprimable
Merci à vous deux, ca fonctionne correctement :)
J'en profite pour vous poser une petite question: sauriez-vous comment réinitialiser la clé primaire de la table Access ? car l'ID ne se remet pas à 0 lorsque je demande le delete all.
Cool :)
Ah tu as un autoincrément, il faut faire ceci après le DELETE :
Changer Table1 par le nom de ta table et myID par le nom du champs autoincrément de ta table.Code:cn.Execute "ALTER TABLE Table1 ALTER COLUMN myID COUNTER(1,1)"
Ah... j'ai encore eu le droit à l'erreur Automation lors de l’exécution de ta ligne de code :(
Te bile pas vas directement dans Access et fait un click droit sur la table modifier et change l'autoincrement par numérique!
La proposition de cerede2000 n'est utile qu'une fois pas a chaque exécution.
Oui effectivement je vais essayer comme ca.
Sinon j'ai lu qu'en compactant ma data base, l'auto incrémentation se réinitialise.
Savez-vous s'il existe une requête pour le faire et que je pourrais insérer dans le code ?
C'est un peut plus compliqué que ça avant je le faisais ave moteur jet4 mais là je ne l'ais jamais fait avec office 2007, alors si quelqu'un a la repose, le temps que je regardes et que je teste...
Et puis le compactage bien qu'anodin comporte quand même de risques, il faut copier la bases. Compacter sous un autre nom. Supprimer la base et renommer la nouvelle base!
http://answers.microsoft.com/fr-fr/o...0194516?auth=1
j'ai trouvé ca sur le net :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 Public Function Compact() Dim acApp As Access.Application Dim strDbPath As String, strDbFile As String Dim strDbFileOld As String strDbPath = CurrentDb.Name strDbFile = Left(strDbPath, Len(strDbPath) - 4) strDbFileOld = Left(strDbFile, Len(strDbFile) - 4) & ".old" Set acApp = GetObject(strDbFile) With acApp .SysCmd acSysCmdSetStatus, "Compactage en cours..." .CloseCurrentDatabase DBEngine.CompactDataBase strDbFile, strDbFileOld Kill strDbFile Name strDbFileOld As strDbFile .OpenCurrentDatabase strDbFile .SysCmd acSysCmdClearStatus End With Application.Quit End Function
Rdurupt, je n'ai pas trouvé ou modifier l'autoincrement par "numérique"
Pièce jointe 204729
A droite de Id il ya marqué NumérAuto là tu écris numérique.!
Bonjour,
Effectivement, j'avais à l'esprit de gérer l'autoincrement manuellement, et j'ai traduis ton alter comme une modification du type et pas comme un init du compteur (interprétation)!,désolé!
je pensais gérer l'incrément.
Code:
1
2
3Id=Id+1 .ID=Id .Update
Pas de soucis :) C'est juste que ce soit claire pour un autre utilisateur qui lirais ça ;)
Oui après, si il n'arrive pas a effectuer la requête, c'est une solution en admettant qu'il est le seul à insérer des choses dans cette table.
Le plus propre reste quand même l'autoincrément avec réinit lors du vidage.
@kimou75 : as tu accès à un Access pour tester la requête en direct déjà ?
J'en étais arrivé à cette conclusion, on ne vide jamais une table en ajout multi utilisateurs !
Et quand bien même remettre les pendules al l'heure en multi utilisateurs est dangereux dans ce genre de contexte!
Si cela peu arriver :)
Je le fais de temps en temps avec des bases SQLServer, car j'en ai besoin.
Ce sont des données à rafraîchir et la source ne permettant pas d'identifier les changement de manière fiable je n'ai d'autres choix que de vider certaines tables pour les re-remplir.
Comme certaines données peuvent être ajouter par d'autres, j'utilise une table temporaire lors du vidage afin de gérer les données qui auraient été rajoutés après.
Et afin d'éviter de me retrouver avec un auto-incrément d'ID à 2 000 000 alors que je n'ai que 100 000 enregistrements je réinit le compteur :)
Mais on ne peux pas comparer ce qu'il est possible de faire entre SQLServer et Access.......
En ce qui me concerne les auto incrément ne sont jamais visible au utilisateurs vue l'intégrité révérenciel!!!
J'accorde in identifiant a chaque utilisateur et je signe les enregistrement sur l'ensemble des données sur lesquels il intervient et les libraire a nulle en suite!
Seule les enregistrements libres sont supprimer!
Ah ben visible non !
Surtout que ça n'as aucun intérêt.... Ce n'est pas une donnée intéressante pour l'utilisateur :)
Mais concernant l'intégrité référentielle en effet puisqu'ils servent aux relations inter-tables, mais avec des procédures stockés robustes ont peux faire ce qu'on veux :)
Bonjour,
@cerede2000 : oui j'ai Access. Heureusement, sinon impossible de savoir si mon programme fonctionne.
D'ailleurs, legénère une erreur Automation lorsque j'execute en pas à pas.Code:.Update
Et j'ai cette erreur lorsque je l'execute via un bouton :
Pièce jointe 204803
Du coup que donne la requête :
Directement dans Access sur ta table ?Code:ALTER TABLE Table1 ALTER COLUMN myID COUNTER(1,1)
@Cerede2000 tu as atteins ton cota de message privé :D du coup je te réponds par ce biais:
J'ai Access 2007.
C'est ce que j'ai fait mais pour exécuter la requête, je dois bien cliquer le le point d'exclamation rouge "exécuter" ?
Pièce jointe 204811
Arf ! Je vais faire du ménache :)
Oui c'est bien cela pour lancer la requête.
Ca donne quoi ?