|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre confirmé
![]() Inscription : juillet 2007 Messages : 248 ![]() |
Salut,
Ma base de données est SQL Server 2005 Express. Lorsque je suis dans Management Studio Express et que je fais cette requete : Code SQL :
Donc, le problème ne vient pas de SQL Server (c'est pour ca que je n'ai pas posté mon message dans le forum SQL Server). Par contre, quand je lance ces requetes depuis le serveur IIS ainsi : Code VBScript :
Est-ce ma methode ou bien l'ADODB qui fait ca ? A NOTER : Exactement le meme code fonctionne parfaitement sur un serveur MySQL. @@IDENTITY renvoi bien le dernier id inséré par la connexion en cours. |
||||
|
|
00
|
|
|
#2 | ||
|
Membre confirmé
![]() Inscription : juillet 2007 Messages : 248 ![]() |
Pour l'instant, j'ai appliqué une solution alternative batarde (mais sommes toutes ficalbe).
C'est : Code SQL :
Mais bon... Pourquoi faire simple quand on peut faire compliqué... |
||
|
|
00
|
|
|
#3 | |||||
![]() ![]() |
Salut,
Tu as ceci : Citation:
Code asp :
Par ailleurs, si le @@ ne fonctionne pas c'est peut-être parce qu'il faut trouver l'équivalent en asp à titre d'exemple, l' (*) d'Access en ASP devient (%) si je me souviens bien.
__________________
Ne dites pas Java pour dire Javascript ! Ces deux codes n'ont rien à voir ! // Essayez d'expliquer, de la façon la plus claire possible votre problème. // Parfois une image vaut mieux qu'un long discours FAQ ASP |
|||||
|
|
00
|
|
|
#4 | |
|
Membre confirmé
![]() Inscription : juillet 2007 Messages : 248 ![]() |
Merci pour la solution...
En fait, je n'étais pas si loin car entre temps, je m'étais posé exactement la meme question : "Pourquoi 2 RecordSet pour un INSERT et un SELECT puisque entre temps on n'est pas forcé de le cloturer (RS.Close) ?" J'avais tenté : Code SQL :
INSERT INTO test (texte) VALUES ('test') ; SELECT @@IDENTITY AS lastid ; Le problème est que lorsque j'execute le code, le serveur répond : Citation:
Pourtant, @@IDENTITY est bien renommé "lastid" via la requete. Et meme en récuperant directement @@IDENTITY, c'est le meme message d'erreur. Par contre, pour ta dernière remarque, je ne vois pas trop |
|
|
|
00
|
|
|
#5 | ||||
![]() ![]() |
Je viens de voir je sais pas si c'est normal mais pourquoi on ne dit pas sur quelle table on travaille dans la requête
Tu as : Code asp :
Ceci fonctionne ou pas ? Code asp :
__________________
Ne dites pas Java pour dire Javascript ! Ces deux codes n'ont rien à voir ! // Essayez d'expliquer, de la façon la plus claire possible votre problème. // Parfois une image vaut mieux qu'un long discours FAQ ASP |
||||
|
|
00
|
|
|
#6 | |
|
Membre confirmé
![]() Inscription : juillet 2007 Messages : 248 ![]() |
En fait, ceci fonctionne bien dans Management Studio Express :
Code SQL :
INSERT INTO test (texte) VALUES ('test') SELECT @@IDENTITY AS lastid Citation:
Avec "FROM test", c'est idem (normal, on ne fait que réduire son champs d'action). J'ai fais un autre test : Code SQL :
INSERT INTO test (texte) VALUES ('test') SELECT texte FROM test Le serveur me répond la meme erreur. |
|
|
|
00
|
|
|
#7 |
![]() ![]() |
Ou alors comme je disais quelque message un peu avant c'est le @@ qui poserait problème ??
Est il possible d'afficher le résultat avec seulement le ? et tester la même chose ou une requête similaire mais sans le @@ ceci permettrais de savoir si c'est bien le @ qui pose problème
__________________
Ne dites pas Java pour dire Javascript ! Ces deux codes n'ont rien à voir ! // Essayez d'expliquer, de la façon la plus claire possible votre problème. // Parfois une image vaut mieux qu'un long discours FAQ ASP |
|
|
00
|
|
|
#8 |
|
Membre confirmé
![]() Inscription : juillet 2007 Messages : 248 ![]() |
J'ai essayé avec "&", "#", "%" et "$".
Le serveur me retourne une erreur pour chaque. Exactement les memes erreurs que quand je fais la meme manipulation dans Management Studio. On peut conclue que la syntaxe semble identique depuis ADODB/ASP et Management Studio. Pour la requete seule, "lastid" renvoi "Null" sans provoquer d'erreur. C'est d'ailleur le problème d'origine du topic. |
|
|
00
|
|
|
#9 | ||
|
Membre confirmé
![]() Inscription : juillet 2007 Messages : 248 ![]() |
Bon ben finalement, on peut conclure qu'il s'agit d'un Bug de ODBC car pour la meme requete SQL sur un serveur MySQL, la réponse est bonne.
Donc, je vais utiliser le principe de précaution en faisant ainsi : Code SQL :
__________________
Cordialement, Gil DERENNE Ingénieur du Son |
||
|
|
00
|
|
|
#10 |
|
Membre chevronné
![]() Inscription : juin 2003 Messages : 766 ![]() |
Yop!
Mouais, mais cette technique ne fonctionne à coup sur qui si tu n'as qu'un utilisateur connecté (et quand on utilise SQLServer, on suppose un trafic important). Même si la probabilité est faible qu'un autre enregistrement soit ajouté dans la base entre l'INSERT et le SELECT, cette probabilité n'est pas nulle, et si on tient compte de la loi de Murphy.... |
|
|
00
|
|
|
#11 |
|
Membre confirmé
![]() Inscription : juillet 2007 Messages : 248 ![]() |
En fait, c'est la clause WHERE qui fait que seul l'utilisateur concerné a pu executer un INSERT en dernier le concernant.
Donc, meme si l'utilisateur 2 et l'utilisateur 3 ont pu executer un INSERT, entre les deux requetes INSERT et SELECT de l'utilisateur 1, la réponse sera fiable.
__________________
Cordialement, Gil DERENNE Ingénieur du Son |
|
|
00
|
|
|
#12 |
|
Membre chevronné
![]() Inscription : juin 2003 Messages : 766 ![]() |
Houlà, mais c'est vrai ça....Heu, 'scuze moi, il était tard, les sangliers n'étaient pas frais...
|
|
|
00
|
|
|
#13 | ||
|
Nouveau Membre du Club
![]() Inscription : décembre 2004 Messages : 41 ![]() |
Bonjour
Je me permet d'ajouter une réponse car j'ai trouvé une solution qui permet de s'affranchir de l'utilisation du "MAX(id)" dans une autre discussion de ce forum. Voici le lien : http://www.developpez.net/forums/sho...%40%40identity et voici le code : Code :
à Immobilis pour cette solution.
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com