Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
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 11/02/2011, 22h52   #1
Invité régulier
 
P-M. G.
Inscription : juin 2010
Messages : 20
Détails du profil
Informations personnelles :
Nom : P-M. G.

Informations forums :
Inscription : juin 2010
Messages : 20
Points : 6
Points : 6
Par défaut ID Auto qui recommence tout seul

Bonjour,

j'ai une base de donnée que je développe où j'importe des courriels de outlook dans une table access. Tout fonctionne parfaitement jusqu'au moment où je déplace les enregistrements dans une seconde table d'archivage.

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
32
33
34
35
36
37
38
39
40
41
42
 
    Dim db              As Database
    Dim rsCourriel      As Recordset
    Dim rsArchive       As Recordset
    Dim strCriteria     As String
 
Set db = CurrentDb()
    Set rsCourriel = db.OpenRecordset("TableCourrielTemporaire", dbOpenDynaset)
    Set rsArchive = db.OpenRecordset("TableCourrielArchives")
 
    strCriteria = "IDCourriel = " & IDCourriel
 
    'On trouve le courriel de la table Temp qui correspond au présent
    'Et on le copie dans un nouveau de la table archive
    rsCourriel.FindFirst strCriteria
    rsArchive.AddNew
 
    rsArchive!IDCourriel = rsCourriel!IDCourriel
    rsArchive!IDCourrielOutlook = rsCourriel!IDCourrielOutlook
    rsArchive!CourrielEnvoyeurNom = rsCourriel!CourrielEnvoyeurNom
    rsArchive!CourrielDestinataire = rsCourriel!CourrielDestinataire
    rsArchive!CourrielCC = rsCourriel!CourrielCC
    rsArchive!CourrielType = rsCourriel!CourrielType
    rsArchive!CourrielUnite = rsCourriel!CourrielUnite
    rsArchive!CourrielContactTelephone = rsCourriel!CourrielContactTelephone
    rsArchive!CourrielContactTelephonePoste = rsCourriel!CourrielContactTelephonePoste
    rsArchive!CourrielDemandeurNom = rsCourriel!CourrielDemandeurNom
    rsArchive!CourrielDemandeurPrenom = rsCourriel!CourrielDemandeurPrenom
    rsArchive!CourrielDate = rsCourriel!CourrielDate
    rsArchive!DemandeCree = accepteOuNon
 
    rsArchive.Update
 
    'On supprime l'enregitrement dans la table des courriels temporaires
    'rsCourriel.Delete
    DoCmd.SetWarnings False
    DoCmd.RunSQL ("DELETE * FROM TableCourrielTemporaire WHERE IDCourriel = " & rsCourriel!IDCourriel)
    DoCmd.SetWarnings True
 
    rsArchive.Close
    rsCourriel.Close
    db.Close
Si je ferme l'application et que je la réouvre, dès que j'importe des nouvelles informations dans ma table de courriel, le champs IDCourriel qui est un "Numéro Auto" recommence à 1. Lorsque j'essaie de déplacer cet enregistrement dans la table d'archives, il y a déjà un enregistrement 1 et refuse évidement de faire l'ajout. Comment pourrais-je éviter que le ID se réinitialise à 1?

N.B. Que je fasse "rsCourriel.Delete" ou la commande RunSQL le ID reset à 1.

Merci infiniment de votre aide,
-P.-M.G.
Nightwing367 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2011, 23h15   #2
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 205
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 205
Points : 5 258
Points : 5 258
Salut,

Est-ce que tu compactes ta base en la fermant ?
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 08h57   #3
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
Bonjour

Par rapport à la question de User, il faut savoir que lorsqu'on compile compacte une base avec des tables vides, le numéro auto éventuel pour ces tables vides sont réinitialisés à "0" (zéro).

D'une certaine façon, il me semble qu'une table temporaire a vocation à ce que ses numéro auto reprenne à zéro à chaque fois.

Piste : attribuer dynamiquement le numéro "ID_Courriel", au moyen d'une table paramètre. On enregistre le dernier numéro attribué, et pour créer le numéro suivant, on prend le dernier + 1 . Et ce nouveau numéro devient le dernier qu'on enregistre.
Ainsi, même en vidant votre table temporaire vous aurez à chaque fois des numéros non déjà utilisés.

Pierre
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 19h10   #4
Invité régulier
 
P-M. G.
Inscription : juin 2010
Messages : 20
Détails du profil
Informations personnelles :
Nom : P-M. G.

Informations forums :
Inscription : juin 2010
Messages : 20
Points : 6
Points : 6
Merci infiniment à vous deux pour vos réponses rapide.
Effectivement je compacte la base sur la fermeture. Je vais m'essayer avec une table de paramètres comme l'a suggéré Pierre.

-P.M.G.
Nightwing367 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h57.


 
 
 
 
Partenaires

Hébergement Web