Récuperer le numéro automatique qui identifie un enregistrement

BasicZx81 Messages postés 140 Date d'inscription samedi 5 mars 2011 Statut Membre Dernière intervention 13 août 2013 - 20 janv. 2012 à 17:46
BasicZx81 Messages postés 140 Date d'inscription samedi 5 mars 2011 Statut Membre Dernière intervention 13 août 2013 - 21 janv. 2012 à 11:31
Bonsoir,
Cela fait plusieurs jours que je cherche une solution pour savoir comment procéder pour obtenir un ou plusieurs numéros d'enregistrements unique dans un environnement multi-utilisateurs.
J'ai donc une table avec une clé primaire sur le champ "ID" du type : numéro incrémenté automatiquement. j'ai lu qu'il suffisait de ne rien mettre dans le champ ID pour que le moteur de la base de données se charge de numéroter chaque enregistrements. Dans ce cas comment faut t'il procéder quand ces numeros sont en reletion avec une autre table qu'il faut aussi mettre à jour ? . Il faudrait pour cela connaitre ces numéros, hors ceux-ci ne sont connus qu'aprés l'enregistrements dans la base.
Faut t'il enregistrer lignes par lignes ou tout en bloc ? Mon appli n'est pas encore develloppé, je suis justement en train de réflechir pour structurer mon programme et mes tables donc je peux m'adapter si besoin.
merci pour vos conseils éclairés si vous pouvez m'aider car je ne vois pas du tout comment mettre en place une méthode fiable.

8 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
20 janv. 2012 à 18:09
Tu enregistre ligne par ligne et immédiatement après le insert, tu fais un SELECT scope_identity (j'espère que c'est supporté par Access)


Et mieux, tu écrit ta requete Insert ainsi :
INSERT .....;SELECT scope_identity;

Ainsi ta requete Insert te renverra une valeur qui est la clé qui vient d'être créée



[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 janv. 2012 à 18:22
Bonjour,
Il faudrait pour cela connaitre ces numéros, hors ceux-ci ne sont connus qu'aprés l'enregistrements dans la base.

Ces numéros sont dans une série incrémentable de 1 à chaque enregistrement. il te suffit donc de connaître le dernier, en triant sur cet idart


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
BasicZx81 Messages postés 140 Date d'inscription samedi 5 mars 2011 Statut Membre Dernière intervention 13 août 2013
20 janv. 2012 à 21:16
Bonsoir et merci pour les réponses.
j'ai trouvé un exemple de code pour utiliser "INSERT .....;SELECT scope_identity;", si j'ai bien compris cette commande permet de récupérer un numéro d'enregistrement fourni par la base lors de l’exécution de la commande INSERT. Cependant j’aurais du préciser que je travaille sur un dataset, comment je peux appliquer cette méthode dans ce cas ? Le dataset étant en mode deconnecté je m'arrache vraiment les cheuveux pour savoir comment fournir ce numéro au dataset ?
0
BasicZx81 Messages postés 140 Date d'inscription samedi 5 mars 2011 Statut Membre Dernière intervention 13 août 2013
20 janv. 2012 à 22:25
Rebonsoir, je crois avoir trouvé une piste qui me parait plus facile et plus sure, j'espère que vous me direz ce que vous en pensé.
Plutôt que d'essayer d'anticiper les conflits et chercher à récupérer un numéro dont je ne serais même pas sûre qu'il ne soit pas déjà utilisé au moment ou je le récupére. Je vais tenter la solution suivante, je remplace le champ numéroAuto par un champ numérique et j'affecte la valeur n à mon numéro d'enregistrement, ensuite j'enregistre et je fait une gestion des conflits dans l'evenement rowupdated. Si il y a conflit j'incremente le numéro à n+1 et je réessaye un enregistrement jusqu'a ce que ca passe.
Vous en pensez quoi ?
0

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

Posez votre question
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
20 janv. 2012 à 22:38
Tu peux utiliser aussi une table compteur dans laquelle tu viens enregistrer à chaque insert le dernier n° utilisé.


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
BasicZx81 Messages postés 140 Date d'inscription samedi 5 mars 2011 Statut Membre Dernière intervention 13 août 2013
21 janv. 2012 à 08:08
Bonjour, merci casy d'essayer de m'aider.
Utiliser une table compteur ? je n'y avais pas pensé. Mais quelle est la différence ? Si je stocke le numéro directement dans ma table ou dans une table dédié cela reviens au même non ?
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
21 janv. 2012 à 10:49
La différence peut être notamment que, au lieu d'être obliger de parcourir toute une table pour identifier le dernier n° utilisé, tu l'a directement dans une table avec une seule ligne, donc plus rapidement.

L'autre différence est que si ce problème se pose sur plusieurs tables, et donc plusieurs compteurs, tu peux tous les rassembler à un seul endroit.

Après, tout dépend de ton architecture et de ton besoin. Moi, perso, je suis plus partisan du n° automatique, mais je travaille pas avec les datasets habituellement tout au moins pour de l'insertion, surtout si c'est de l'insertion avec relation.

[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
BasicZx81 Messages postés 140 Date d'inscription samedi 5 mars 2011 Statut Membre Dernière intervention 13 août 2013
21 janv. 2012 à 11:31
Merci pour l'explication casy, je vais étudier cette possibilité et faire des essais.
0
Rejoignez-nous