IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP Discussion :

[SQL SERVER 2000] récupérer l'id après un insert


Sujet :

ASP

  1. #1
    car
    car est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 59
    Points : 38
    Points
    38
    Par défaut [SQL SERVER 2000] récupérer l'id après un insert
    Bonjour,

    je cherche à récupérer l'id du dernier tuple inséré.
    J'utilise comme SGBD sql server 2000.
    je connais rien en sql server et en asp. Je ne sais pas où placer mon code dans la page asp.

    ps :
    il existe un poste traitant de ce sujet mais apparament c'est pour access

  2. #2
    car
    car est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 59
    Points : 38
    Points
    38
    Par défaut
    Savez-vous ci le code suivant(qui vient d'un autre post sur acces) fonctionne pour SQL SERVER ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    set objConnexion = Server.CreateObject("ADODB.Connection") 
    objConnexion.Open "Chaine de connexion" 
     
    strSql="BEGIN TRANS;" & _ 
       "insert into T_CO_COMMENT(CO_TEXT) values('"&Commenrtaires&"');" & _ 
       "SELECT @@IDENTITY as ID;" & _ 
       "END TRANS" 
     
    set objRs = objConnexion.Execute(strSql) 
     
    if not objRs.eof then 
       response.write(objRs("ID")) 
    end if 
     
    objRs.close 
    set objRs = nothing 
     
    objConnexion.close 
    set objConnexion = nothing

  3. #3
    Membre averti Avatar de bourvil
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : Israël

    Informations forums :
    Inscription : Juin 2002
    Messages : 411
    Points : 329
    Points
    329
    Par défaut
    la difference entre sql 2000 et access se fait au niveau de la conection qui n'est pas la meme et l'utilisation de dates ds les requetes, pour le reste, c'est pareil!
    le code a l'air de marcher si tu n'oublie pas de definir ta "chaine de connection"!
    et le mieux est d'essayer avant de poser la question!!!
    Franchement, je suis capable du meilleur comme du pire, mais, dans le pire, c'est moi le meilleur.
    Coluche

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 166
    Points : 189
    Points
    189
    Par défaut
    ps :
    il existe un poste traitant de ce sujet mais apparament c'est pour access
    Heu pas exactement.
    La question posée est du style "est-ce que ça marche comme dans sql server?".
    post : http://www.developpez.net/forums/viewtopic.php?t=377491
    Au niveau sql : "@@identitity" ça marche dans sql server comme dans access, par contre "begin trans .... end trans;" c'est moins sûr. Et là je pose la question à tout le monde.

  5. #5
    car
    car est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 59
    Points : 38
    Points
    38
    Par défaut
    la difference entre sql 2000 et access se fait au niveau de la conection qui n'est pas la meme et l'utilisation de dates ds les requetes, pour le reste, c'est pareil!
    le code a l'air de marcher si tu n'oublie pas de definir ta "chaine de connection"!
    et le mieux est d'essayer avant de poser la question
    J'ai évidemment essayé ce code en mettant ma chaine de connection et ma propre requête. C'est parce que j'obtenais des erreurs que je me suis permis de reparler de ce post.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Set conn = Server.CreateObject("ADODB.Connection")
    ' chaine de connexion
    connstring = "driver={SQL Server};" & "server=****;uid=Report; pwd=****; database=*****"
     'ouverture de la connexion
    conn.open connstring
     
     
    strSql = "BEGIN TRANS; " & _
     
    " INSERT INTO TABLEAU(DATE_CREATION) VALUES ('08/09/2005') ;"& _
     
    "SELECT @@IDENTITY as ID;" & _ 
      "END TRANS; " 
     
     
     
    set objRs = conn.Execute(strSql) 
     
    if not objRs.eof then 
       response.write(objRs("ID")) 
    end if 
     
    objRs.close 
    set objRs = nothing
    voila mon code soit j'obtiens la très instructive "erreur interne au serveur"
    soit j'obtiens"incorrect syntax near TRANS."

  6. #6
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    Essaye avec BEGIN TRANSACTION; et COMMIT TRANSACTION ou ROLLBACK TRANSACTION à la fin pour valider ou annuler les modifications

  7. #7
    car
    car est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 59
    Points : 38
    Points
    38
    Par défaut
    On mettant COMMIT j'obtiens le message d'erreur suivant :

    ADODB.Recordset (0x800A0E78)
    Cette opération n'est pas autorisée si l'objet est fermé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    dim i
    dim a(10)
     
    Set conn = Server.CreateObject("ADODB.Connection")
    ' chaine de connexion
    connstring = "driver={SQL Server};" & "server=****;uid=***; pwd=***; database=**"
     'ouverture de la connexion
    conn.open connstring
     
    strSql = "BEGIN TRANSACTION " & _ 
     
    " INSERT INTO TABLEAU(DATE_CREATION) VALUES ('08/09/2004');" & _ 
    "SELECT @@IDENTITY AS ID;" & _ 
    "COMMIT TRANSACTION ; " 
     
     
     
    set objRs = conn.Execute(strSql) 
     
    if not objRs.eof then 
       response.write(objRs("ID_TABLEAU")) 
          response.write(objRs("ID")) 
    end if 
     
    objRs.close 
    set objRs = nothing

  8. #8
    car
    car est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 59
    Points : 38
    Points
    38
    Par défaut
    J'ai trouvé!!! :o
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Set conn = Server.CreateObject("ADODB.Connection") 
    ' chaine de connexion 
    connstring = "driver={SQL Server};" & "server=**;uid=**; pwd=Report; database=***"
     'ouverture de la connexion 
    conn.open connstring 
     
    strSql = "BEGIN TRANSACTION " & _ 
    " Set nocount on"& _ 
    " INSERT INTO TABLEAU(DATE_CREATION) VALUES ('08/09/2004');" & _ 
    "SELECT @@IDENTITY AS ID;" & _ 
    "COMMIT TRANSACTION ; " & _
    "set nocount off"
     
     
    set objRs = conn.Execute(strSql) 
     
    if not objRs.eof then 
     
          response.write(objRs("ID")) 
    end if 
     
    objRs.close 
    set objRs = nothing
    Il faut mettre nocount à on.En effet si on utilise l'analyseur de requête on obtient :
    (1 ligne(s) affectée(s))

    ID
    ----------------------------------------
    36

    (1 ligne(s) affectée(s))
    Ce qui fout tout en l'air.

    plus de détails sur http://www.sqlteam.com/item.asp?ItemID=422

    Merci à stéphane pour le "commit"

  9. #9
    Membre du Club
    Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2005
    Messages : 42
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par car
    J'ai trouvé!!! :o
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Set conn = Server.CreateObject("ADODB.Connection") 
    ' chaine de connexion 
    connstring = "driver={SQL Server};" & "server=**;uid=**; pwd=Report; database=***"
     'ouverture de la connexion 
    conn.open connstring 
     
    strSql = "BEGIN TRANSACTION " & _ 
    " Set nocount on"& _ 
    " INSERT INTO TABLEAU(DATE_CREATION) VALUES ('08/09/2004');" & _ 
    "SELECT @@IDENTITY AS ID;" & _ 
    "COMMIT TRANSACTION ; " & _
    "set nocount off"
     
     
    set objRs = conn.Execute(strSql) 
     
    if not objRs.eof then 
     
          response.write(objRs("ID")) 
    end if 
     
    objRs.close 
    set objRs = nothing
    Il faut mettre nocount à on.En effet si on utilise l'analyseur de requête on obtient :
    (1 ligne(s) affectée(s))

    ID
    ----------------------------------------
    36

    (1 ligne(s) affectée(s))
    Ce qui fout tout en l'air.

    plus de détails sur http://www.sqlteam.com/item.asp?ItemID=422

    Merci à stéphane pour le "commit"

    Hello !

    un problème cependant que je ne parviens pa à résoudre : le recordset renvoyé et en adOpenForwardOnly : cela empêche un décompte du nombre d'enregistrements grâce à RecordCount, et cela empêche aussi de se ballader dans le recordset...

    Avez-vous une idée ?

    Merci !!!

    Fabrice, TOULOUSE

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 16/10/2008, 14h49
  2. Réponses: 1
    Dernier message: 16/11/2007, 22h28
  3. [SQL Server 2000] Récupérer dernier caractère
    Par Invité dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/07/2007, 14h35
  4. [SQL SERVER 2000] Récupérer le FOR XML
    Par Madinico dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 27/07/2007, 17h04
  5. Réponses: 2
    Dernier message: 21/03/2007, 16h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo