recupérer l'identifiant d'un element qu'on vient de créer

recupérer l'identifiant d'un element qu'on vient de créer - SQL/NoSQL - Programmation

Marsh Posté le 31-10-2002 à 17:53:51    

En fait ds ma requete INSERT, j'ajoute le nom d'un utilisateur, l'identifiant de cet utilisateur est de type autonumber, existe t'il une solution pr recup ce nombre ds la meme requete ou alors autre soluce ?????????
 
 
Merci d'avance

Reply

Marsh Posté le 31-10-2002 à 17:53:51   

Reply

Marsh Posté le 31-10-2002 à 17:56:38    

Précise le SGBD stp ;=)

Reply

Marsh Posté le 31-10-2002 à 17:57:44    

en fait c'est access ms je ne voudrais pas etre limité par le SGBD

Reply

Marsh Posté le 31-10-2002 à 17:58:27    

Si tu ne veux pas être limité, fais un select max(id) sur ta table juste après l'insertion.

Reply

Marsh Posté le 31-10-2002 à 18:00:58    

le pb c'est que si qqn fait un insert pendant que je suis entre mon insert et mon select max(id) chuis ds la merde

Reply

Marsh Posté le 05-11-2002 à 12:56:02    

tu programmes en quoi et quelle API?  ADO? DAO?


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 05-11-2002 à 14:05:45    

azra28 a écrit a écrit :

le pb c'est que si qqn fait un insert pendant que je suis entre mon insert et mon select max(id) chuis ds la merde




 
faut bloquer les insertions entre les deux alors (transations) mais je sais pas si c'est possible...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 05-11-2002 à 14:10:48    

azra28 a écrit a écrit :

le pb c'est que si qqn fait un insert pendant que je suis entre mon insert et mon select max(id) chuis ds la merde




 
Si tu es sur une appli pro, effectivement ça peut merdouiller.
 
Si tu es sur un site amateur, il y a 0.00000001% de chances qu'un tel cas se produise :D
 
Et je vois que tu es sous Access, donc a priori la soluce du max+1 est plausible :o

Reply

Marsh Posté le 05-11-2002 à 14:43:38    

une solution employée est d'avoir une table contenant ces fameuses valeurs à incrémenter.  Ainsi tu iras chercher tes nouveaux ID dans cette table (un row par table qui possède un ID auto incrémenté).  Comme tu lockeras cette table au moment de prendre une nouvelle valeur, tu n'as pas de risque que deux rows d'une table se retrouvent avec le même id.  Cette astuce te dispense d'avoir des propriétés auto_increment.
 
J'ai fait court, mais j'espère que c'était quand même compréhensible ;-)


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 05-11-2002 à 15:02:31    

C'est bien la soluce que g retennu, ms il peu tjrs avoir qqn qui fait une insertion pendant le meme tps

Reply

Marsh Posté le 05-11-2002 à 15:02:31   

Reply

Marsh Posté le 05-11-2002 à 15:19:44    

ben si tu lockes la table pour toi, pendant que tu fais ton incrémentation, personne d'autre ne peut en faire une.  Donc s'il ne peut faire l'incrémentation de l'ID, il pourra pas insérer une row.  zéro risque comme ça ;)


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 05-11-2002 à 15:35:10    

azra28 a écrit a écrit :

C'est bien la soluce que g retennu, ms il peu tjrs avoir qqn qui fait une insertion pendant le meme tps




 
Il y a combien d'utilisateurs en même temps?

Reply

Marsh Posté le 05-11-2002 à 15:35:53    

Fred999 a écrit a écrit :

Si tu ne veux pas être limité, fais un select max(id) sur ta table juste après l'insertion.




 
 :ouch: le truc super fiable  :heink:


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 05-11-2002 à 15:37:41    

DarkLord a écrit a écrit :

 
 
 :ouch: le truc super fiable  :heink:  




 
Et tu fais ça comment sinon?
 
C'est de l'Access, et, encore une fois, il faut voir les risques encourus par rapport à la somme de travail nécessaire.
 
S'il ne peut pas locker les tables...
 
Edit : ou alors, il faut abandonner l'idée d'un champ  autoincrémentable, et prendre, par exemple, l'heure système du serveur, à la miliseconde, ça devrait suffire non? :D


Message édité par Fred999 le 05-11-2002 à 15:38:55
Reply

Marsh Posté le 05-11-2002 à 15:45:22    

bin en Access déjà faut pas espérer pouvoir faire ce genre de choses de manière fiable. C'est comme si on ne regardait pas les limites des logiciels.  
 
Tout n'est pas toujours possible non plus hein :o


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 05-11-2002 à 15:47:20    

DarkLord a écrit a écrit :

bin en Access déjà faut pas espérer pouvoir faire ce genre de choses de manière fiable. C'est comme si on ne regardait pas les limites des logiciels.  
 
Tout n'est pas toujours possible non plus hein :o




 
C'est bien ce que je dis! :D

Reply

Marsh Posté le 05-11-2002 à 15:52:21    

et en mysql, comment il faut faire ?
 
 
merci


---------------
oui oui
Reply

Marsh Posté le 05-11-2002 à 15:55:03    

En informatique, il ne faut jamais rien "se dire", rien assumer, c'est toujours une cause de bugs "en production".  Ca finit toujours par planter.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 05-11-2002 à 15:57:12    

art_dupond a écrit a écrit :

et en mysql, comment il faut faire ?
 
 
merci




 
Si tu disposes de PHP, utilise la fonction mysql_insert_id()
 

Reply

Marsh Posté le 05-11-2002 à 15:57:32    

ok merci :)


---------------
oui oui
Reply

Marsh Posté le 05-11-2002 à 16:04:30    

Pour info, avec Postgre lors de l'insertion, il renvoie un Oid et avec cet Oid tu retrouve ton élément sans probleme... (where oid=...)


---------------
"Par moment j'me d'mande si chui pas con" G. de Suresnes
Reply

Marsh Posté le 05-11-2002 à 23:03:38    

Enfin, ce que je veux faire, c'est pour un forum et je ne veux pas etre limité par le SGBD choisi, chuis pati sur cette idée..

Reply

Marsh Posté le 06-11-2002 à 10:48:09    

Pour un forum?
 
Alors la probabilité que deux users postent un message en même temps est plus que minuscule, regarde ici, c'est super rare que des gens postent dans la même seconde, avec 600 users connectés...
 
Et on ne peut jamais être vraiment indépendant du SGBD, tu dois toujours t'adapter aux qualités et aux défauts ;)

Reply

Marsh Posté le 06-11-2002 à 10:51:48    

Fred999 a écrit a écrit :

Alors la probabilité que deux users postent un message en même temps est plus que minuscule, regarde ici, c'est super rare que des gens postent dans la même seconde, avec 600 users connectés...




 
Chuis d'acc, ms bon ça s'appelle du bricolage et j'aime pas trop ça

Reply

Marsh Posté le 06-11-2002 à 11:28:05    

Alors crée une file d'attente pour les messages à poster [:spamafote]
 
Edit : j'ai codé un système de championnat de hockey pour 30 utilisateurs, et préfère me coltiner leurs éventuelles insertions simultanées 1 fois dans la saison que de coder un truc pour éviter ça (ce qui sert un ENORME coup de pas de chance), c'est une question de temps/travail.
 
Je me répète : combien d'utilisateurs attends-tu simultanément sur ton forum?


Message édité par Fred999 le 06-11-2002 à 11:29:50
Reply

Marsh Posté le 06-11-2002 à 17:54:56    

Pr le nb d'utilisateurs, j'en sais trop rien, je voudrais le mettre en open source qd j'aurais bien avancé...
 
Et c'est surtt pr m'apprendre à dev en asp.net, je connais bien (tres bien meme) asp ms en .net g des choses à apprendre

Reply

Marsh Posté le 06-11-2002 à 18:22:30    

un forum sur de l'access, vive la performance / stabilité  :pt1cable:  
 
ne pas être dépendant d'un SGBD à la rigueur, choisir un SGBD totalement inadapté = folie totale
 


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 06-11-2002 à 18:25:28    

Je sais pr acces, ms au moins je l'ai sous la main et je testerais par la suite sous d'autres SGBD principalement SQL server et MySQL
SInon g trouvé la solution, en ado, il suffit d'executer :SELECT @@IDENTITY AS NewID juste apres et ça rend l'id

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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