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

BasicZx81 140 Messages postés samedi 5 mars 2011Date d'inscription 13 août 2013 Dernière intervention - 20 janv. 2012 à 17:46 - Dernière réponse : BasicZx81 140 Messages postés samedi 5 mars 2011Date d'inscription 13 août 2013 Dernière intervention
- 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.
Afficher la suite 

8 réponses

Répondre au sujet
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 20 janv. 2012 à 18:09
0
Utile
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
Commenter la réponse de cs_casy
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 20 janv. 2012 à 18:22
0
Utile
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
Commenter la réponse de ucfoutu
BasicZx81 140 Messages postés samedi 5 mars 2011Date d'inscription 13 août 2013 Dernière intervention - 20 janv. 2012 à 21:16
0
Utile
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 ?
Commenter la réponse de BasicZx81
BasicZx81 140 Messages postés samedi 5 mars 2011Date d'inscription 13 août 2013 Dernière intervention - 20 janv. 2012 à 22:25
0
Utile
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 ?
Commenter la réponse de BasicZx81
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 20 janv. 2012 à 22:38
0
Utile
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
Commenter la réponse de cs_casy
BasicZx81 140 Messages postés samedi 5 mars 2011Date d'inscription 13 août 2013 Dernière intervention - 21 janv. 2012 à 08:08
0
Utile
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 ?
Commenter la réponse de BasicZx81
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 21 janv. 2012 à 10:49
0
Utile
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
Commenter la réponse de cs_casy
BasicZx81 140 Messages postés samedi 5 mars 2011Date d'inscription 13 août 2013 Dernière intervention - 21 janv. 2012 à 11:31
0
Utile
Merci pour l'explication casy, je vais étudier cette possibilité et faire des essais.
Commenter la réponse de BasicZx81

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.