Champ AutoIncrement d'une table

Champ AutoIncrement d'une table - VB/VBA/VBS - Programmation

Marsh Posté le 10-05-2004 à 14:23:56    

Bonjour,
 
J'ai crée une application VB6 avec une base de données Access dans laquelle j'ai une table dossier et un champ Id, qui est l'identifiant unique de l'enregistrement. Dans un Form, j'ai un controle data lié à cette table et j'ai un bouton 'nouveau dossier' afin de créer un nouvel enregistrement. Je ne savais pas trop comment gérer les Id de cette table. J'ai lu sur le web que je pouvais utiliser un champ Id autoincrémenté ce qui me paraissait une bonne idée mais j'ai un comportement super bizarre. Imaginons que j'ai les id de 1 à 10 dans la table. Je crée un nouvel enregistrement. Après la méthode Addnew, le nouvel Id est 11, ce qui est correct. Mais si je supprime ensuite les Id 11, 10, 9 par exemple, je crois que normalement à la création d'un nouvel enregistrement, le nouvel Id doit être 9 non ?  Puis que l'Id de plus haut rang est 8. Mais non, en fait l'enregistrement créé a l'Id 12 ... !!! Comme si il gardait en mémoire la trace des Id 9,10,11 supprimés ... Si je ferme VB6 et relance l'application c'est la même chose, je me retrouve quand même avec un Id 12 ... !!! Est-ce le comportement normal d'un champ autoIncrementé ??
Peut-être que je peux me passer d'un champ autoincrémenté mais dans ce cas là comment je fais pour savoir quel est le record avec l'Id de plus haut rang (afin de créer mon nouvel enregistrement avec la valeur de cet Id+1) ... ? Quelqu'un a-t-il une vraie méthode à me proposer ??
 
S'il vous plait aider moi car je vais abandonner sinon. Où conseillez moi des forums, des livres parce que je suis à cours d'informatio.
Merci à tous pour votre aide.
 

Reply

Marsh Posté le 10-05-2004 à 14:23:56   

Reply

Marsh Posté le 10-05-2004 à 15:00:15    

en effet, je ne crois pas que tu aies vraiment besoin d'un champs numeroAuto.  
essaie ce code d'ajout :
 
Dim MaTable As Recordset
Set MaTable = CurrentDb.OpenRecordset("NomTable", DB_OPEN_TABLE)
MaTable.AddNew
MaTable("Donnée" ) = ValeurAajouter
MaTable("DateHeure" ) = Now
MaTable.Update
MaTable.Close
 
en revanche, si tu tiens absolument au champs numeroAuto, et que tu veux le mettre à jour, il te suffit de le supprimer / recreer avant ton ajout :
 
Function suppr_champs()
 
CurrentDb.Execute "ALTER TABLE NomTable DROP COLUMN NomChampsNumeroAuto"
CurrentDb.Execute "ALTER TABLE NomTable ADD COLUMN NomChampsNumeroAuto COUNTER"
 
End Function

Reply

Marsh Posté le 10-05-2004 à 17:30:28    

Merci à vos deux réponses et particulièrement à ese-aSH car je crois qu'il m'a éclairé de façon significative (merci à vous deux sincèrement car c'est la 6ème question que je pose en 1 mois et demi et c'est les deux premières réponses donc encore une fois merci beaucoup à vous deux). Oui exactement, je pense que je m'en fous d'avoir des sauts dans mes ID en fait ! j'ai pas trop de formation Base de données donc j'ai des résonnements pas très cohérents. En fait cet Id je m'en sers pour numéroter l'objet de cette table qui est un dossier (dossier client par exemple) donc je voulais qu'ils suivent pour une plus grande clarté pour l'utilisateur ... mais qu'importe en fait car la suppression d'un dossier sera très très rare (cas d'erreur dans la saisie au début de l'utilisation de l'application par exemple), il y aura plus de l'archivage d'un dossier quand il n'est plus 'pending'. Donc je pense utiliser cet attribut 'AutoIncrement'.
Pendant que je vous ai (j'en profite), une autre petite question ou plutôt un conseil. Mon application va générer des rapports dans WORD. J'ai déjà toute cette partie codée dans une macro word (macro.dot). Dois-je appeler cette macro (function Main()) depuis mon code VB6 ou dois-je incorporer ce code dans mon projet ?
Merci !!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed