42 messaggi dal 03 gennaio 2006
Dopo aver inserito un elemento in una tabella,....
Set objCon = Server.CreateObject("ADODB.Connection")
objCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.MapPath(path_table)
strSql = "INSERT INTO table (nome, cognome) VALUES "
strsql = strSql & "('" & strNome & "', '" & strCognome & "')"

objCon.Execute strSql

objCon.Close
Set objCon = Nothing

come faccio ad ottenere il valore "id_item" (cioe l'id che viene generato automaticamente come chiave) dell'elemento appena inserito?
devo creare una nuova query? o esiste un modo automatico per ottenerlo?

Grazie dot.
Modificato da dotmax il 20 aprile 2006 16.16 -
91 messaggi dal 04 gennaio 2002
Ciao.
Purtroppo questo è uno dei grossi problemi di tutte le applicazioni client-server e web-based.
In teoria, dato che si presume che più utenti possano inserire un record nello stesso (o quasi) istante, non è possibile sapere CON ESATTEZZA il valore del campo autonumber....ma se le transizioni concorrenti sono rare puoi fare una select max(id) from tabella...ed è risolto.

Per lavoro pulito:
1)aprire la tabella lokkandola (solo tu puoi inserire o modificare i dati)
2)fare inserimento
3)fare select max(id) from tabella
4)chiudere connessione e liberare il lock

in questo modo sei sicuro (dato che non possono esserci transizioni concorrenti) che il valore dell'autonumber è effettivamente quello generato per il tuo record!

Per ovviare a i problemi detti sopra non riesci a creare un codice univoco lato client?
Tipo codice fiscale,numero fattura, etc,etc.
é la soluzione più SICURA
42 messaggi dal 03 gennaio 2006
Ciao Guido, hai confermato il mio dubbio sull'immisione contemporanea di item da parte di utenti diversi, pensavo che la query di INSERT, potesse restituire un qualche puntatore all'ultimo item, in modo automatico...
Comunque, potresti spiegarmi (o indicarmi qualche link utile) su come "bloccare" e "liberare" una tabella durante un'operazione?

Ciao dot.
593 messaggi dal 09 ottobre 2002
www.dotnetside.org
La precisazione di guidocaser in linea di principio è teoricamente corretta.

Tuttavia la concomitanza, statisticamente parlando, nel caso dei nostri "piccoli" siti è davvero un'ipotesi remota.

Subito dopo l'esecuzione della query di inserimento (per intenderci: objCon.Execute strSql), aggiungi:

strID_item = objCon.Execute("SELECT TOP 1 @@IDENTITY FROM table;").fields(0).value


e la tua variabile strID_item conterrà il tuo bel valorino.

Ciao

Pochi post. Anzi, quasi quasi spengo
http://www.dotnetside.org/
42 messaggi dal 03 gennaio 2006
Grazie 1000

ciao dot.
6 messaggi dal 28 aprile 2004
Questa soluzione è un pò più complicata ma a mio parere più professionale
______________________________________________________________________

Dim cnAdo, rsSalva, strConnString, strSQLSalva
Dim id_item, strNome, strCognome
id_item=0 'se devi fare un inserimento assegni un valore non esistente
id_item=x 'assegni un valore da modificare se devi fare un aggiornamento
set cnAdo=Server.CreateObject("ADODB.Connection")
strConnString"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.MapPath(path_table)
strSQLSalva="SELECT * FROM table WHERE id_item=" & id_item
cnAdo.Open(strConnString)
cnAdo.CursorLocation = adUseClient
set rsSalva=Server.CreateObject("ADODB.Recordset")
rsSalva.ActiveConnection = cnAdo
rsSalva.CursorType = adOpenDynamic
rsSalva.LockType = adLockOptimistic
rsSalva.Source = strSQLSalva
rsSalva.Open
If (Request("Submit")="Elimina")then
rsSalva.Delete
Else
If rsSalva.EOF Then
rsSalva.AddNew
End if
rsSalva.Fields("nome")=strNome
rsSalva.Fields("cognome")=strCognome
rsSalva.Update
id_item=rsSalva.Fields("id_item")
End if
rsSalva.Close
set rsSalva = nothing
cnAdo.Close
set cnAdo = nothing
______________________________________________________________________
Modificato da Miryddyn il 20 aprile 2006 09.56 -
42 messaggi dal 03 gennaio 2006
Cia Miryddyn, grazie per la risposta, visto che sono abbastanza inesperto in programmazione, non e' che magari potresti inserire qualche riga di commento al codice

Grazie dot.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.