Hej! Jag skulle försöka med: Hur vet man att man verkligen fått det senaste fältet!? Om du använder dig av MovePrevious, MoveNext etc så förflyttar du dig i de posterna som ditt recordset innehåller. MAX(ID) och moveprevious osv garanterar inte att du får det absolut senast skapda ID numret... (förmodar att du har unique identifier på fältet (autoräknare)) tillägg... en annan kan du ladda upp en bild medans du tänker eller precis efter du klickat och du vill ju ha de id:et som du fick när du laddade upp orginalbilden... tomsev:s sätt är det "bästa" då det garanterar att det är användarens senaste id (eller blir det dumt när allt körs på samma server? det är väl senaste id för aktuell connection?). Det ska fungera på Access också f.o.m. version 2000. Tack JohanD.. ;) hähä Man skulle kunna lösa det genom att låsa applicationen just då med å fasiken, access stödjer oxo @@IDENTITY variabeln, hmm det måste jag testa. Jag brukar köra den här till SQL och adodb.rocordset till access. @@identity måste köras i samma batch.Det senaste ID nummret.....
Försöker att hämta ut det senaste inlagda ID nummret med följande kod, men det vill sig inte, vad är galet?
<% Set Connect = Server.CreateObject("ADODB.Connection")
Set RS = Server.CreateObject("ADODB.Recordset")
Connect.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("../../_data/begBoat.mdb")
Visa = "SELECT * FROM TBL_IMAGES"
RS.Open Visa, Connect, adOpenStatic, adLockOptimistic %>
</font><font size="1">Här laddar du upp en "thumbnail"
(en liten bild 100x80 ) av den stora bilden som du nyss
laddade upp. ID nr. på den var <%=RS(MAX("ID"))%</font><%
RS.Close
Connect.Close
%>Sv: Det senaste ID nummret.....
<code>
<%
Set Connect = Server.CreateObject("ADODB.Connection")
Set RS = Server.CreateObject("ADODB.Recordset")
Connect.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("../../_data/begBoat.mdb")
Visa = "SELECT MAX(ID) as LastId FROM TBL_IMAGES"
RS.Open Visa, Connect, adOpenStatic, adLockOptimistic
%>
</font><font size="1">Här laddar du upp en "thumbnail"
(en liten bild 100x80 ) av den stora bilden som du nyss
laddade upp. ID nr. på den var <%=RS("LastId")%></font>
<%
RS.Close
Connect.Close
%>
</code>Sv: Det senaste ID nummret.....
Jag har ett liknande problem, när man precis lagt till ett fält med Recordset objektet, hur får man fram idet för det fältet!? Jag är inte ute efter det ultimata sättet bara ett några exempel på hur det skulle kunna gå till, samt varför på det sättet framför andra...
Ex.vis:
Lägg till ett fält, kör en ny sql sats som hämtar det största id värdet... finns det andra alternativ
Kör addNew. sen update. sen backa ett steg med MovePrevious, läs av id fältet, funkar det??Sv: Det senaste ID nummret.....
Och innehållet där baseras ju då på din SQL fråga, så om du lägger till en post måste du ställa en ny fråga till din databas och plocka in den nya posten i det recordsetet.
Som alternativ till MAX fungerar även TOP tillsammans med en ORDER BY DESC där du kan ange hur många poster du vill hämta in, i ditt fall en då eftersom du är ute efter det största:
SELECT TOP 1 ID FROM TBL_IMAGES ORDER BY ID DESC
(Jag har för mig att om du använder en Access databas så kan du inte förflytta dig med MovePrevios i denna...)Sv: Det senaste ID nummret.....
däremot..
SELECT @senasteID = @@IDENTITY
checka på de.. ;)
<code>
strSql = "INSERT INTO tabell"
strSql = strSql & "(fält, fält)"
strSql = strSql & "VALUES(värde, värde)"
oConn.Execute(strSql)
strSql = "SELECT @@IDENTITY FROM tabell"
Set oRs = Server.CreateObject("ADODB.Recordset")
oRs.Open strSql, oConn
lngID = oRs(0) <----- Absolut senaste id
</code>
har för mig att du måste ha adovbs.inc inluderat för att det skall funka.. kommer inte ihåg.. länge sedan.. men det märker du.. ;) Om det funkar mot Access vet jag inte heller... detta är gjort mot sql-db för en tid sen..Sv: Det senaste ID nummret.....
Sv: Det senaste ID nummret.....
/Johan
PS. adovbs behövs inte...Sv: Det senaste ID nummret.....
> > (eller blir det dumt när allt körs på samma server? det är väl senaste id för aktuell connection?).
Spelar ingensomhelst roll, du får alltid ut det senaste id:et för just din "session" så att säga... det är databasen som är källan, inget annat..
i detta fallet laddar man upp en bild, ett id skapas, du tar ut det id:et och visar det..
Om du hade använt MAX(id) och andra förslag så hade risken varit, eller rättare sagt, det hade varit såhär (eftersom sql frågan är ställd på ett visst sätt) att du hade fått fel id, om någon trycker precis efter dig..
eller hur?? rätta mig om jag har fel.. ;)Sv: Det senaste ID nummret.....
<code>
Application.Lock
'hämta id
Application.Unlock
</code>
för att vara helt säker på att att man får rätt id
//PutteSv: Det senaste ID nummret.....
Tack för alla tipsen, det där med Lock o Unlock känns lite uber seriöst, men det kommer säkert till användning någon gång.Sv: Det senaste ID nummret.....
<%
set connection = server.createObject("adodb.Connection")
connection.open "dsn=labb; uid=sa; pw="
Dim rs, ny_identity, strSql
strSql = "insert into tblNamn(namn) select 'Tomas Lundgren'" & "select @@identity"
Set Rs = connection.execute(strSql).nextrecordset
ny_identity = rs(0)
response.write ny_identity
%>