ASP : Récupérer la valeur de la clé primaire

calje Messages postés 83 Date d'inscription   Statut Membre Dernière intervention   -  
 PHOENIX -
Bonjour,

J'ai deux tables T1 et T2. T1 est la table principale et T2 est une table dépendante de T1.

Lorsque je crée un enregistrement dans T1, je voudrais récupérer sa clé primaire (qui est un numéro automatique) pour pouvoir l'affecter comme clé étrangère dans un nouvel enregistrement dans T2.

Quelle est la bonne méthode pour faire ça en ASP ?

Merci
José
A voir également:

4 réponses

yaubi
 
quelque soit le langage, il faut passer par une requète en SQL :

Supposons ta table comme suit :

table : ID, champ1, champ2

ID est la clée primaire, AutoNumber incrémental

tu peux utiliser la requète suivante :

SELECT MAX(ID) FROM Table;

Mais cela ne fonctionne QUE, si ta clée s'incrémente automatiquement à chaque enregistrement. Dans le cas contraire (génération aléatoire) cela dépend du SGBD que tu utilises. En Posgresql, par exemple, tu as une fonctions prédéfinie que tu peux utiliser pour consulter l'id du dernier enregistrement d'une table.

Pour contourner la difficulté, tu peux aussi ajouter un champ date dans lequel tu enregistres la date à laquelle tu écris ton enregistrement. A ce moment la tu peux faire :

SELECT MAX(dateCreation) from Table;

A+
Yoann
0
PHOENIX
 
Mais dans le cas d'une base de données partagés, et avec des accès simultanés, ça risque fortement de ne pas marcher, alors je pense qu'il faut faire tout ça dans une transcaction. je veux dire par là, l'insertion dans la table Mère(Master), et la récupération de la clé incrémentale crée.
0
nabzone
 
avec SQL SERVER tu dois faire ceci :
Set dbconn = Server.CreateObject("adodb.connection")
dbconn.Open "#####"

Set dbrec = dbconn.execute("insert into ... values (..,.,..); select @@identity").nextrecordset

tu peux maintenant récupérer la clé :
sa valeur est -------> dbrec(0)

***********************************
IMPORTANT
***********************************
cela ne fonctionne que si tu utilises l'incrémentation automatique de ta clé (champ identity)

ex :
CREATE TABLE ####
(
UID int NOT NULL IDENTITY (1,1),
...............................................,
)

@+
0
calje Messages postés 83 Date d'inscription   Statut Membre Dernière intervention   5
 
Merci pour vos infos.

Finalement, on m'a donné une méthode qui marche très bien et qui utilise les méthodes du recordset :

ex :

' ### Sauvegarde dans ComConseil ###
objRS.Open "ComConseil", objConn, 3, adLockOptimistic

objRS.AddNew
objRS("Nom") = request.QueryString("txtNom")
objRS("Prenom") = request.QueryString("txtPrenom")
objRS("Commentaire") = request.QueryString("txtCommentaire")
objRS("Ordre") = request.QueryString("txtOrdre")
objRS("ID_ComScol") = session("SessID_CS")
objRS.Update

' ### récupère la valeur de la nouvelle clé primaire
vID_ComConseil = objRS("ID_ComConseil")

objRS.close

' ### Sauvegarde dans ComConseilCoord ###
objRS.Open "ComConseilCoord", objConn, 3, adLockOptimistic
for Each strName in request.QueryString
select case strName
case "txtTelephone"
if request.QueryString("txtTelephone") <> "" then
objRS.AddNew
objRS("Coordonnee") = request.QueryString("txtTelephone")
objRS("ID_ComConseil") = vID_ComConseil
objRS("ID_TypeCoord") = 1
objRS.Update
end if
etc ...

Merci pour vos réponses...

José
0
big
 
slt
Moi j'ai un probleme d'ingrementation de la cle dans une base de donnees Access.
Je veux programmer une base de donnees qui gere les etudiants avec les numero matricule.
J'ai la table table qui est composee de : NumMatriculeEtud, NomEtud, PrenomEtud, AdresseEtud.
Je veux quant je saisie le nom , et le prenom que la base prennent les deux premier mot du nom de famille et du prenom puis ajouter un numero auto.
Merci d'avance
0