webForumDet fria alternativet

@@IDENTITY blir 0

13 svar · 695 visningar · startad av web00132

web00132Medlem sedan maj 2001797 inlägg
#1

Har sökt i forumet men hittar inget bra svar på detta.

sql = "INSERT INTO upphovsman(fornamn,efternamn,land,fodelsear) VALUES('" & upload.form("nyupphovsman_fornamn") & "','" & upload.form("nyupphovsman_efternamn") & "','" & upload.form("nyupphovsman_land") & "','" & upload.form("nyupphovsman_fodelsear") & "')"
set tmpRS = getDB().execute(sql)
sql = "SELECT @@IDENTITY AS test"
set tmpRS2 = getDB().execute(sql)
id2 = tmpRS2("test")

Variabeln id2 blir 0 hur jag än gör. Beror det på min DB-funktion, getDB()? Den ser ut så här:

function getDB()
	set getDB = server.createobject("Adodb.connection")
	getDB.open "DRIVER={MySQL ODBC 3.51 Driver};SERVER=servernamn;PORT=3306;DATABASE=dbnamn; USER=anvandare;PASSWORD=losenord;OPTION=16384;"
end function

Den borde ju inte stängas i alla fall mellan insertarna liksom. Jag kör ASP mot MySQL 5.

Litet tillägg: Tabellen 'upphovsman' har alltså ett auto_increment-fält som heter 'upphovsmanID'.

PS. Finns någon fin (gärna svensk) tutorial på Stored Procedures i MySQL 5 så man slipper de här problemen? Ge gärna tips! DS.

emissionMedlem sedan dec. 19996 721 inlägg
#2

Så ska du absolut inte använda getDB, eftersom du inte kan stänga kopplingen. Garbage collection-systemet är inte något att falla tillbaka på.

set conn=getDB()
sql = "INSERT INTO upphovsman(fornamn,efternamn,land,fodelsear) VALUES('" & upload.form("nyupphovsman_fornamn") & "','" & upload.form("nyupphovsman_efternamn") & "','" & upload.form("nyupphovsman_land") & "','" & upload.form("nyupphovsman_fodelsear") & "');SELECT @@IDENTITY AS test"
set tmpRS = conn.execute(sql).NextRecordset
id2 = tmpRS ("test")
TravoniMedlem sedan okt. 20041 556 inlägg
#3

Du skall väl använda SELECT last_insert_id i mysql.
http://www.google.se/search?hl=sv&q="last_insert_id"+mysql+5.0&btnG=Sök&meta=

web00132Medlem sedan maj 2001797 inlägg
#4

Travoni: Det gick lika bra bra med @@IDENTITY
emission: Well, I did not know that :birp

TravoniMedlem sedan okt. 20041 556 inlägg
#5

Japp, du måste hämta det senaste inlägget i samma scope.

TravoniMedlem sedan okt. 20041 556 inlägg
#6

Error...

Jag gör precis enligt emissions förslag, men får detta fel:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[MySQL][ODBC 3.51 Driver][mysqld-5.0.15-standard-log]You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version for the right syntax to use near ';SELECT @@IDENTITY' at line

Har testat både med @@IDENTITY och last_insert_id()
och både med och utan alias

sql = "INSERT INTO tbl(ett,tva,tre) VALUES('Ett','Två','Tre');SELECT @@IDENTITY"
set rs = connection.execute(sql).NextRecordset
lastid = rs(0)

Vad felar?

LarsGMedlem sedan dec. 200012 464 inlägg
#7

Du kan inte skicka flera statement i samma executeanrop.

emissionMedlem sedan dec. 19996 721 inlägg
#8

Klarar inte MySQL(-klienten) det? Det var värst.

TravoniMedlem sedan okt. 20041 556 inlägg
#9

Och vad återstår att göra då om jag vill ha ut det senaste värdet?

web00132Medlem sedan maj 2001797 inlägg
#10
sql = "INSERT INTO tbl(ett,tva,tre) VALUES('Ett','Två','Tre');"
set rs = connection.execute(sql)
sql = "SELECT @@IDENTITY;"
set rs = connection.execute(sql)
lastid = rs(0)
emissionMedlem sedan dec. 19996 721 inlägg
#11

Exekvera två gånger.

TravoniMedlem sedan okt. 20041 556 inlägg
#12

Ok, men hur stor är sannoligheten att någon skall exekvera imellan?
Antar att det även kommer an på hur frekvent den används.

emissionMedlem sedan dec. 19996 721 inlägg
#13

Travoni skrev:

Ok, men hur stor är sannoligheten att någon skall exekvera imellan?

Det spelar ingen roll. Värdets scope/livslängd är uppkopplingen.

TravoniMedlem sedan okt. 20041 556 inlägg
#14

aha, vad bra då. :)

130 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)