webForumDet fria alternativet

ID-nummer på posten som skapades?

ASP

16 svar · 288 visningar · startad av Lukaspojken

Medlem sedan maj 20011 312 inlägg
Frågan#1

Jag gör två insert och skulle behöva få det första postens msgID-nummer hur får jag tag på det?

	strSQL = "INSERT INTO forum (Thread_ID, Thread_ReplyOrder, Thread_Level, msgFROM, msgDATE, msgTIME, msgTopic, msgTEXT, IP) VALUES " &_
	"(" & ThreadID & ", " & ThreadReplyOrder & ", " & cint(ThreadLevel) + 1 &_
	", '" & msgFrom & "', #" & dteDatum & "#, '" & Svtid & "', '" & msgTopic & "', '" & msgText & "', '" & Ip & "')"
	Connect.Execute(strSQL)

	strSQL = "INSERT INTO forumUpdate (msgID, msgUpdate, msgUptime) VALUES (" & ?????MSGID???? & ", #" & dteDatum & "#, '" & Svtid & "')"
	Connect.Execute(strSQL)

------------------
Alltid lär man sig något nytt varje dag...

Medlem sedan juni 200032 967 inlägg
#2

om du använder sql server eller access 2000 kan du ställa denna fråga efter din första insert:

strSQL = "SELECT @@IDENTITY"

mvh,

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
can i borrow your goat?
</A>

Medlem sedan maj 20011 312 inlägg
#3

Jag använder access 97...hmmm...hur löser jag det då...:)

------------------
Alltid lär man sig något nytt varje dag...

Medlem sedan maj 20011 312 inlägg
#4

Är den här koden att föredra:

strSQL = "SELECT msgID FROM forum WHERE msgFROM=" & msgFrom & " AND msgDate=" & dteDatum & " AND msgTime=" & Svtid
Set RecSet = Connect.Execute(strSQL)

	msgID = RecSet("msgID")		

RecSet.Close
Set RecSet = nothing

Jag vet inte riktigt vad jag ska använda som fält identifierare än msgFrom, msgDatum och msgTime...känns lite klumpigt...

------------------
Alltid lär man sig något nytt varje dag...

Medlem sedan dec. 19996 721 inlägg
#5

För att åstadkomma detta säkert med Access97 ska du använda ADO-metoderna (AddNew etc.) för att kunna plocka ut ID:t. Sök på IDENTITY här på forumet, så ordnar det sig.

/e

Medlem sedan dec. 200012 464 inlägg
#6

http://www.aspfaqs.com/aspfaqs/ShowFAQ.asp?FAQID=79

------------------
essentitia preter non sans multiplicandum

Medlem sedan maj 20011 312 inlägg
#7

Jag får inte det att fungera....så här skrev jag

	Set RecSet = Server.CreateObject("ADODB.Recordset")

	RecSet.Open forum, Connect, adOpenKeySet, adLockOptimistic, adCmdTable

	RecSet.AddNew
	RecSet("Thread_ID") = ThreadID
	RecSet("Thread_ReplyOrder") = ThreadReplyOrder
	RecSet("Thread_Level") = cint(ThreadLevel) + 1
	RecSet("msgFROM") = msgFrom
	RecSet("msgDATE") = dteDatum
	RecSet("msgTIME") = Svtid
	RecSet("msgTopic") = msgTopic
	RecSet("msgTEXT") = msgText
	RecSet("Ip") = Ip
	RecSet.Update
	msgID = RecSet("nameOfAutonumberField")

	RecSet.Close
	Set RecSet = nothing

Detta felmeddelande får jag:

ADODB.Recordset error '800a0bb9' 

Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.

Och den pekar på denna rad:

RecSet.Open forum, Connect, adOpenKeySet, adLockOptimistic, adCmdTable

------------------
Alltid lär man sig något nytt varje dag...

Medlem sedan juni 200032 967 inlägg
#8

har du inkluderat adovbs.inc på sidan?

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
can i borrow your goat?
</A>

Medlem sedan dec. 200012 464 inlägg
#9

Har du inkluderat adovbs.inc? Den innehåller definitioner för konstanterna

adOpenKeySet,
adLockOptimistic,
adCmdTable

------------------
essentitia preter non sans multiplicandum

Medlem sedan maj 20011 312 inlägg
#10

Den är inkluderad...det verkar vara nåt lurt med adOpenKeySet, adLockOptimistic, adCmdTable

Jag testade att skriva siffror istället men samma fel uppstod.

Men skrev jag
3,3 bara så kom den enda ner till raden

msgID = RecSet("nameOfAutonumberField")

och då blev det ett felmeddelande där istället. Att den inte kunde hitta det.

------------------
Alltid lär man sig något nytt varje dag...

Medlem sedan juni 20001 257 inlägg
#11

Jag förstod inte @nders kod:

strSQL = "SELECT @@IDENTITY"

Jag antar att det måste vara fel att efter den första INSERTen göra:

strSQL = "SELECT TOP 1 id FROM tabell ORDER BY id DESC"

Ersätter

strSQL = "SELECT @@IDENTITY id FROM tabell"

den felaktiga koden? Och om så är fallet, vad händer om en annan användare hinner göra en INSERT före?

Jag kör SQL Server.

------------------
http://www.tavlingar.se

[Redigerat av kristoffer den 16 jul 2001]

Medlem sedan maj 20011 312 inlägg
#12

Men jag har inte access 2000 så jag kan inte skriva det så...:(

------------------
Alltid lär man sig något nytt varje dag...

Medlem sedan juni 200032 967 inlägg
#13

kristoffer:

strSQL = "SELECT @@IDENTITY id FROM tabell"

sa jag väl inte?

strSQL = "SELECT @@IDENTITY"

@@identity är en global variabel som innehåller räknarvärdet på den av denna användare senast inlagda posten.

använder man sql server kan man dessutom göra så här om man vill:

strSQL = "insert bla (bla) values ('bla); select @@identity"
set objRS = objConn.execute(strSQL)
senasteid = objRS(0)

mvh,

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
can i borrow your goat?
</A>

Medlem sedan dec. 200012 464 inlägg
#14

Heter din räknarkolumn

nameOfAutonumberField

?

OT:
kristoffer
Det skall enbart vara


select @@identity

dvs, man skall inte ange något tabellnamn. Det värde som returneras är det senaste som har genererats vid en insert/update för någon tabell med räknare inom denna connection. Det påverkas inte av vad någon annan användare gör.

------------------
essentitia preter non sans multiplicandum

Medlem sedan juni 20001 257 inlägg
#15

Jag testade och det fungerade! Det var värst vad ni kan mycket. Finns det något inom ämnet ni inte kan? :) Vilka siter har ni byggt?

------------------
http://www.tavlingar.se

Medlem sedan dec. 19996 721 inlägg
#16

Det ska vara

RecSet.Open "forum", Connect, adOpenKeySet, adLockOptimistic, adCmdTable
Medlem sedan maj 20011 312 inlägg
#17

Jag försökte med alla möjliga kombinationer. Jag tog bort adCmdTable och då fungerade det.

Visa = "SELECT * FROM forum"
RecSet.Open Visa, Connect, 1, 3

Tack för allt...nu ska jag förhoppningsvis inte störa mer...:) tack igen...

------------------
Alltid lär man sig något nytt varje dag...

242 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
117 ms — deklarationer (db)
0 ms — hämta statistik (cache)
122 ms — hämta tråd, inlägg och bilagor (db)
115 ms — ändringar (db)