Récupérer l'id auro-incrementé asp/mysql

Résolu
medicair Messages postés 37 Date d'inscription vendredi 28 mars 2003 Statut Membre Dernière intervention 25 juin 2010 - 31 août 2006 à 23:05
zaptaf Messages postés 11 Date d'inscription dimanche 10 juillet 2005 Statut Membre Dernière intervention 20 octobre 2009 - 28 sept. 2006 à 06:57
bonjour, j'utilise la méthode de MCJO seulement apres l' insert j'arrive à récupérer n'importe quel champs sauf l'Id auto-incrémenté(ASP/MySQL) :
<%
Dim flat
Dim tito
'définit le Recordset
Dim chaine
set objconn=server.createobject("ADODB.Connection")
chaine = "dsn=datamysql;uid=xxx;option=16386"
objconn.open chaine
Set flat = Server.CreateObject("ADODB.Recordset")
'Ouvre le Recordset
flat.Open "GLM_XXX", objconn, 1,2,2
flat.Addnew
flat.fields("id_X01") = X01
flat.fields("ID_user") = session.SessionID
'MaTable.fields("start") = "'Now()'"
' & vbCrLf
for i=1 to 200
flat.fields("rp"& i)="-"' & vbCrLf
next
'ajoute les données dans la base
flat.update
tito=flat("id_XXX") ' (l'auto-incrémenté) celui que je n'arrivepas à récupérer en revanche, flat.fields("ID_user") pas de problème
response.Write(tito)
'on ferme et on supprime objconn et le flat
flat.Close
Set flat = Nothing
objconn.Close
Set objconn = Nothing
%>
Quelqu'un peut il m'éclairer pour récupérer cet ID ?



D'avance merci
SDA

2 réponses

zaptaf Messages postés 11 Date d'inscription dimanche 10 juillet 2005 Statut Membre Dernière intervention 20 octobre 2009
28 sept. 2006 à 06:57
Pour répondre à ta question, voici quelques bons conseils et un script rapide sur le pouce.
Avec Le modèele ADO, c'était facile de retirer sur le même script l'id inséré en ajouter

Mais le modèle SQL est le même pour presque tous les moteurs SQL :  La  méthode execute passée vers l'objet de connexion
insert un nouvel enrégistrement sans tenir compte de la clé ou du compteur auto-incrémenté.

Alors je ne me sert jamais de last_insert_id car, n'oublions jamais que plusieurs utlisateurs font des requêtes d'update, insertion ou modification en même temps,-  parfois plus de 15 en moins d'une seconde----. Qui garanti alors qu'il sagit bien de ta propre insertion et non une autre entremelée dans le tas? Alors j'évite au max le Last_insert_id.

Je propose plutôt une facon de faire, un peu dada mais qui asssure pour 100% la récupération de l'ID, ou du champ désiré au cas ou plusieurs insertion deraient effectuées en même temps.

Mise en situation :
L'utilisateur ajoute une annonce classée en exécutant la req d'insertion, mais en y inserant temporairement ou indéfiniement une référence d'insertion. Il ouvre par la suite un nouveau recordset qui va chercher le recordset contenant la référence, et voilà. Tu peux même supprimer cette référence une fois que tu a recu l'id, etc......

Normallement j'utilise une connexion permanente pour la base de données, dans mon global.asa, pour que le base soit toujours ouverte pour tous les utilisateurs : application("objconnexion").execute(SQL), mais allons en partant du fait que tu dois travailler avec un include de connexion unique......................

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<%
'les variables de ton choix
variablexX= "blablabla"
variableY ="bliblibli"

' construction d'une chaine de référence unique basée sur ce que tu veux et la variable de temps, ce qui assure que ce soit la seule référence sur des millions de jeux, étant donné que le temps et la date sont uniques, mais ne pas oublier au moins une variable de plus, car on peut noter une moyenne de 15 insertions en simultané par seconde sur un portail achalandé.

StrRef Temp= variableX & variableY & now()
'on passe la requete
req = "INSERT INTO latable (variableX,variableY,ref) VALUES(.......variableX,variableY,StrRefTemp......................)
set objrecordset = objconnexion.execute(req)
'on redéfni alors une nouvelle requete pour chercher l'id du jeu fraichement inséré
req = "SELECT * FROM latable where ref like"& ........StrRef Temp........"
  set objrecordset = objconnexion.execute(req)
' on récupère  l'id recherché au départ
 id_annonce = objecordset("id_annonce")
%>

et on ferme le recorsdset, la connexion, bla bla

N'hésites- pas èa m'écrire pour toute question, ou suggestion. Je travail en asp3 et mysql sur un gigantesque portail. Tu auras certainement besoin de script de page suivante, précédente pour les résultats de recherches.

Le typage des curseurs sont inexistant je crois en MYSQL. Genre objrecordset.Absolutepage, etc, c'est mort en Mysql.

Je ne sais pas si c'est légal sur ce site, je suis nouveau, mais je laisse mon courriel, au cas ou il y aurait d'autres mordus de l'asp traditionnel , connecté sur MYSQL, ou Acces.

En espérant que ca puisse t'aider

Sébastien

zaptaf@hotmail.com
3
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 36
1 sept. 2006 à 00:04
Salut

Pour recuperer le dernier ID de mysql
c'est LAST_INSERT_ID

exemple

UPDATE Chant SET CHANT_NOM="le titre du chant"
WHERE Chant.CHANT_ID=LAST_INSERT_ID();

Apres à toi de completer ton code ;-)

Voila
0
Rejoignez-nous