Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Recupero 'ID' appena inserito

Non è raro di avere la necessità di recuperare un ID (identificativo chiave primaria) che sia stato appena inserito in una tabella tramite una query di accodamento come questa:


<%
'Apertura connessione "conn"
'Inserimento valori
strSQL = "INSERT INTO rubrica (cognome, nome) VALUES ('Rossi', 'Marco')"
conn.Execute(strSQL)
%>



A prima vista, la soluzione immediata potrebbe essere quella di ordinare la tabella in ordine decrescente di ID e, tramite la clausola TOP 1 (che funziona esclusivamente su database di tipo Access però!), recuperarne solo il primo record (ovvero l'ultimo ad essere stato inserito):


<%
'Recupero dell'ultimo ID: clausola TOP 1 e ID DESC
strSQL = "SELECT TOP 1 ID FROM rubrica ORDER BY ID DESC"
%>



Utilizzando questo sistema però estrarremo effettivamente l'ultimo record inserito, ma non potremmo avere la sicurezza completa che si tratti proprio del nostro.
In molti casi infatti, quando più utenti hanno accesso alla stessa tabella, potrebbero verificarsi inserimenti concorrenti e potremmo trovarci con un ID appartenente sicuramente "all'ultimo record", ma non necessariamente a quello inserito da noi, bensì da chi, casualmente, ha immesso il proprio pochi (infinitesimi) istanti dopo di noi.
Per superare questo problema apparentemente senza soluzione dobbiamo riuscire a legare il record inserito con l'operazione che l'ha immesso nella tabella, quasi si trattasse di un'operazione unica.
Per ottenere tale risultato possiamo avvalerci di una particolare sintassi dell'istruzione SELECT, per di più non esclusiva dei database Access, che fa uso della clausola @@IDENTITY:


<%
'Settaggio recordset objRS
set objRS = Server.CreateObject("ADODB.recordset")
'Query
strSQL = "SELECT @@IDENTITY FROM rubrica"
'Apertura del recordset ed esecuzione della query
objRS.Open strSQL, conn
ultimo_id = objRS(0)
'Chudura e distruzione dell'oggetto recordset
objRS.Close
set objRS = nothing
'Chiusura connessione "conn"
%>



Utilizzando il codice riportato sopra, nella variabile ultimo_id avremo finalmente l'ID del "nostro" ultimo record inserito
Non è raro di avere la necessità di recuperare un ID (identificativo chiave primaria) che sia stato appena inserito in una tabella tramite una query di accodamento come questa:


<%
'Apertura connessione "conn"
'Inserimento valori
strSQL = "INSERT INTO rubrica (cognome, nome) VALUES ('Rossi', 'Marco')"
conn.Execute(strSQL)
%>



A prima vista, la soluzione immediata potrebbe essere quella di ordinare la tabella in ordine decrescente di ID e, tramite la clausola TOP 1 (che funziona esclusivamente su database di tipo Access però!), recuperarne solo il primo record (ovvero l'ultimo ad essere stato inserito):


<%
'Recupero dell'ultimo ID: clausola TOP 1 e ID DESC
strSQL = "SELECT TOP 1 ID FROM rubrica ORDER BY ID DESC"
%>



Utilizzando questo sistema però estrarremo effettivamente l'ultimo record inserito, ma non potremmo avere la sicurezza completa che si tratti proprio del nostro.
In molti casi infatti, quando più utenti hanno accesso alla stessa tabella, potrebbero verificarsi inserimenti concorrenti e potremmo trovarci con un ID appartenente sicuramente "all'ultimo record", ma non necessariamente a quello inserito da noi, bensì da chi, casualmente, ha immesso il proprio pochi (infinitesimi) istanti dopo di noi.
Per superare questo problema apparentemente senza soluzione dobbiamo riuscire a legare il record inserito con l'operazione che l'ha immesso nella tabella, quasi si trattasse di un'operazione unica.
Per ottenere tale risultato possiamo avvalerci di una particolare sintassi dell'istruzione SELECT, per di più non esclusiva dei database Access, che fa uso della clausola @@IDENTITY:


<%
'Settaggio recordset objRS
set objRS = Server.CreateObject("ADODB.recordset")
'Query
strSQL = "SELECT @@IDENTITY FROM rubrica"
'Apertura del recordset ed esecuzione della query
objRS.Open strSQL, conn
ultimo_id = objRS(0)
'Chudura e distruzione dell'oggetto recordset
objRS.Close
set objRS = nothing
'Chiusura connessione "conn"
%>



Utilizzando il codice riportato sopra, nella variabile ultimo_id avremo finalmente l'ID del "nostro" ultimo record inserito
Link copiato negli appunti

Non è raro di avere la necessità di recuperare un ID (identificativo chiave primaria) che sia stato appena inserito in una tabella tramite una query di accodamento come questa:


<%

'Apertura connessione "conn"

'Inserimento valori

strSQL = "INSERT INTO rubrica (cognome, nome) VALUES ('Rossi', 'Marco')"

conn.Execute(strSQL)

%>

A prima vista, la soluzione immediata potrebbe essere quella di ordinare la tabella in ordine decrescente di ID e, tramite la clausola TOP 1 (che funziona esclusivamente su database di tipo Access però!), recuperarne solo il primo record (ovvero l'ultimo ad essere stato inserito):


<%

'Recupero dell'ultimo ID: clausola TOP 1 e ID DESC

strSQL = "SELECT TOP 1 ID FROM rubrica ORDER BY ID DESC"

%>

Utilizzando questo sistema però estrarremo effettivamente l'ultimo record inserito, ma non potremmo avere la sicurezza completa che si tratti proprio del nostro.

In molti casi infatti, quando più utenti hanno accesso alla stessa tabella, potrebbero verificarsi inserimenti concorrenti e potremmo trovarci con un ID appartenente sicuramente "all'ultimo record", ma non necessariamente a quello inserito da noi, bensì da chi, casualmente, ha immesso il proprio pochi (infinitesimi) istanti dopo di noi.

Per superare questo problema apparentemente senza soluzione dobbiamo riuscire a legare il record inserito con l'operazione che l'ha immesso nella tabella, quasi si trattasse di un'operazione unica.

Per ottenere tale risultato possiamo avvalerci di una particolare sintassi dell'istruzione SELECT, per di più non esclusiva dei database Access, che fa uso della clausola @@IDENTITY:


<%

'Settaggio recordset objRS

set objRS = Server.CreateObject("ADODB.recordset")

'Query

strSQL = "SELECT @@IDENTITY FROM rubrica"

'Apertura del recordset ed esecuzione della query

objRS.Open strSQL, conn

ultimo_id = objRS(0)

'Chudura e distruzione dell'oggetto recordset

objRS.Close

set objRS = nothing

'Chiusura connessione "conn"

%>

Utilizzando il codice riportato sopra, nella variabile ultimo_id avremo finalmente l'ID del "nostro" ultimo record inserito