När jag registrerar en ny user till en databas som har räknare i fältet "ID" vill jag veta på nästa sida vad han/hon får för ID. Det du kan göra är att först göra en INSERT till databasen med den nya infon... sen längre ner i skriptet så kör du en SELECT från databasen. Jag vill ju att det ID:et som redan har skapats ska komma fram. Efter en INSERT så kan du SELECT fram det senast inlagda ID't med satsen SELECT MAX(ID) FROM DinTabell Du kan t ex göra så här: "Efter en INSERT så kan du SELECT fram det senast inlagda ID't med satsen SELECT MAX(ID) FROM DinTabell" <code> Förslagen ovan är lite riskabla, tänk om det är flera personer som jobbar mot din applikation samtidigt. "Förslagen ovan är lite riskabla, tänk om det är flera personer som jobbar mot din applikation samtidigt." Titta på: [Få ut ID på den post man just lagt till] Tjenare finns en inbyggd funktion för detta i SQL server och du använder den enligt följande. Gäller för id fält som är autoräknare. Kör du Access, kan du använda dig av adOpenKeyset: Tack för alla svar! Testade Tommys förslag och fungerade perfekt, just det att jag använder mig utav en access databas.Visa det nya ID:et?
Jag börjar med en sida, reg.asp där man anger namn o sånt, sen kommer man till reg_now.asp där all information läggs in. Går det på reg_now.asp få reda på vilket ID han/hon fick? Eller vad gör jag åt saken?Sv: Visa det nya ID:et?
Ett tips är att göra något som blir unikt för just den personen t ex en tidstämpel eller ett slumpat tal/uttryck för att försäkra dig om att det är rätt person som select:as ur databasen.Sv: Visa det nya ID:et?
Vill INTE riskera att det blir några dubbletter.Sv: Visa det nya ID:et?
Sv: Visa det nya ID:et?
Först INSERT INTO:
INSERT INTO databas(namn,...,tid) VALUES ('kalle',...,tidstämpel)
Sen SELECT:
SELECT ID FROM databas WHERE namn='kalle' AND tid=tidstämpel
Tänk på att teoretiskt sett så kan det, om du har otur, bli två "kalle" i databasen med samma tidstämpel... om dom typ läggs till under samma sekund... därför kan det vara bättre att hitta på någon slumpad "tidstämpel" istället för att bara använda "datum och tid".Sv: Visa det nya ID:et?
Det man bör tänka på är att ovanstående inte funkar om ID:na är slumpade i tabellen. Är dom inkrementella så funkar det däremot. Sv: Visa det nya ID:et?
Application.Lock
Först INSERT INTO:
INSERT INTO databas(namn,...,tid) VALUES ('kalle',...,tidstämpel)
Sen SELECT:
SELECT ID FROM databas WHERE namn='kalle' AND tid=tidstämpel
Application.Unlock
</code>Sv: Visa det nya ID:et?
<code>
strSql="insert into tblTest(namn)"
strSql=strSql & " Values ('" & request("tboxNamn") & "')" & " select @@identity"
set rsNamn=connection.execute(strSql).NextRecordset
IntPersonId=rsNamn(0)
</code>Sv: Visa det nya ID:et?
Precis som jag skrev ovan:
"Tänk på att teoretiskt sett så kan det, om du har otur, bli två "kalle" i databasen med samma tidstämpel... om dom typ läggs till under samma sekund... därför kan det vara bättre att hitta på någon slumpad "tidstämpel" istället för att bara använda "datum och tid"."Sv: Visa det nya ID:et?
Finns ett exempel där du får ID nummret genom att lägga till posten med ett recordset.Sv: Visa det nya ID:et?
set rs = objconn.execute "select @@IDENTITY"
newid = rs(0)
viktigt att du samma connection objekt som du hade vid skapandet av den nya posten.
Sedan kan du ju skicka med newid som querystring eller något.
/CSv: Visa det nya ID:et?
<%
Set AddCon = Server.CreateObject("ADODB.Connection")
AddCon.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("data.mdb")
Set RSAdd = Server.CreateObject("ADODB.Recordset")
Add = "SELECT * FROM Tabell"
RSAdd.Open Add, AddCon, adOpenKeySet, adLockOptimistic
RSAdd.AddNew
RSAdd("Test") = strTest
RSAdd.Update
strNewID = RSAdd("ID")
%>
Om du använder adOpenKeyset, kan du hämta ID direkt (innan du stänger kopplingen till databasen)...
Detta fungerar utmärkt för mig!
//TommySv: Visa det nya ID:et?