[VB] autoincrement et resultset

autoincrement et resultset [VB] - VB/VBA/VBS - Programmation

Marsh Posté le 22-05-2003 à 12:03:11    

Salut !
Bon, j'utilise une base mysql avec un programme VB.  
Je voudrais faire un insert dedans, avec la création automatique d'un identifiant (donc en autoincrement).
La requête d'insertion marche, je récupère un resultset comme il faut mais je ne sais pas comment récupérer la clé qui a été calculée.  
Lorsque je fait resultset.fields("laclé" ) il me jette en me disant que ce champ ne fait pas partie du resultset.
 
Bien sûr si je fais une requête de selection ensuite ça peut marcher mais c'est très sale vu que je pourrais pas faire cette requete sur la clef et que par conséquent, rien ne me garanti que je n'aurai qu'un enregistrement en retour.
 
Vous me suivez ?
Vous avez une idée ?

Reply

Marsh Posté le 22-05-2003 à 12:03:11   

Reply

Marsh Posté le 22-05-2003 à 12:07:04    

cedricbrun a écrit :

Salut !
Bon, j'utilise une base mysql avec un programme VB.  
Je voudrais faire un insert dedans, avec la création automatique d'un identifiant (donc en autoincrement).
La requête d'insertion marche, je récupère un resultset comme il faut mais je ne sais pas comment récupérer la clé qui a été calculée.  
Lorsque je fait resultset.fields("laclé" ) il me jette en me disant que ce champ ne fait pas partie du resultset.
 
Bien sûr si je fais une requête de selection ensuite ça peut marcher mais c'est très sale vu que je pourrais pas faire cette requete sur la clef et que par conséquent, rien ne me garanti que je n'aurai qu'un enregistrement en retour.
 
Vous me suivez ?
Vous avez une idée ?
 


 
Est-ce que tu fais bien un Update aprés ton Insert ?


---------------
Il ne faut pas vendre la peau de l'ours.....NON, il ne faut pas!!!!
Reply

Marsh Posté le 22-05-2003 à 12:11:22    

Nan je vais essayer

Reply

Marsh Posté le 22-05-2003 à 12:13:39    

ça marche pas, il me dit que ce type de champ peut pas utiliser cette méthode :  
texto : "il ne prend pas en charge la mise à jour"

Reply

Marsh Posté le 22-05-2003 à 14:05:44    

En fait mon problème a l'air un peu différent de ce que je pensais :
Le resultset refuse mon resultset.close après avoir envoyé une requête d'ajout. Apparemment le resultset se ferme lui même lors d'une requete d'ajout, ou encore l'objet Connection ne renvoi pas d'objet resultset valide lorsqu'il s'agit d'une requete d'ajout...je vais creuser par là

Reply

Marsh Posté le 22-05-2003 à 14:19:42    

cedricbrun a écrit :

ça marche pas, il me dit que ce type de champ peut pas utiliser cette méthode :  
texto : "il ne prend pas en charge la mise à jour"


 
Il faut pour cela que ta commande soit en mode "Optimiste"
(je ne sais pas trop comment a marche pour une requetre manuelle car moi j'utilise des dataencvironnement et des command. Cela dit, tu dois trouver ca dans l'aide)
 
Tu pourra ainsi inserer dans ta table avec le Update et recuperer ton index autoincrementé !


---------------
Il ne faut pas vendre la peau de l'ours.....NON, il ne faut pas!!!!
Reply

Marsh Posté le 22-05-2003 à 14:29:45    

après ton insert tu fais directement un  

Code :
  1. select @@identity;


tu auras le dernier ID que tu as inséré dans ta DB.


---------------
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 22-05-2003 à 14:40:53    

J'essaye, merci les amis!

Reply

Marsh Posté le 22-05-2003 à 14:48:03    

drasche a écrit :

après ton insert tu fais directement un  

Code :
  1. select @@identity;


tu auras le dernier ID que tu as inséré dans ta DB.


Oui mais cela ne pose-t-il pas de pb quand à la concurrence d'accés ?  
ex : deux utilisateur entre les données quasi au même moment, les deux ajouts se font avant le select @@identity de chacun des utilisateur, puis le select @@identity renvoi le dernier numéro aux deux utilisateurs non ?
 
Dans ce cas c'est caca, risque de bug non négligeable.

Reply

Marsh Posté le 22-05-2003 à 15:02:34    

Ca ne pose aucun problème si ça se passe sur la même connexion, et il n'y a pas interférence sur des connexions concurrentes.  La méthode est safe et il me semble que c'est un standard SQL.


---------------
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 22-05-2003 à 15:02:34   

Reply

Marsh Posté le 22-05-2003 à 15:20:35    

bah..select @@identity me renvoi toujours "-1"

Reply

Marsh Posté le 22-05-2003 à 15:31:44    

tu peux nous montrer un peu de ton code, parce que chez moi ça marche.


---------------
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 22-05-2003 à 15:41:11    

drasche a écrit :

tu peux nous montrer un peu de ton code, parce que chez moi ça marche.


Yep j'ai été trop vite...je refais un essai autrement.

Reply

Marsh Posté le 22-05-2003 à 16:22:56    

C'est bon ça marche enfin  :pt1cable:  
Merci beaucoup, c'est quand même beaucoup plus propre ainsi !

Reply

Marsh Posté le 22-05-2003 à 16:28:14    

Serait tu le cédric brun de l'iut de nantes par hasard?

Reply

Marsh Posté le 22-05-2003 à 16:32:37    

Quelle perspicacité !
Serait-tu le dane de l'iut de nantes par hasard ?

Reply

Marsh Posté le 22-05-2003 à 16:33:36    

lui même en pleine galère sur le net

Reply

Marsh Posté le 22-05-2003 à 16:34:30    

Quel est ton pb, que cherche tu ? (du VB ?)
Tu dois avoir un super sujet de stage toi aussi

Reply

Marsh Posté le 22-05-2003 à 16:34:39    

tu t'y connaît en VBA

Reply

Marsh Posté le 22-05-2003 à 16:36:04    

va sur le sujet que j'ai mis sur le forum
 
tout est expliqué
 
requête SQL et passage des paramètres associés

Reply

Sujets relatifs:

Leave a Replay

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