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>
16 svar · 288 visningar · startad av Lukaspojken
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...
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>
Jag använder access 97...hmmm...hur löser jag det då...:)
------------------
Alltid lär man sig något nytt varje dag...
Ä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...
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
http://www.aspfaqs.com/aspfaqs/ShowFAQ.asp?FAQID=79
------------------
essentitia preter non sans multiplicandum
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...
har du inkluderat adovbs.inc på sidan?
------------------
<A HREF="http://cartman.nu" TARGET=_blank>
can i borrow your goat?
</A>
Har du inkluderat adovbs.inc? Den innehåller definitioner för konstanterna
adOpenKeySet,
adLockOptimistic,
adCmdTable
------------------
essentitia preter non sans multiplicandum
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...
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]
Men jag har inte access 2000 så jag kan inte skriva det så...:(
------------------
Alltid lär man sig något nytt varje dag...
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>
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
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
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...