Newsgroup: it.comp.www.asp
Titolo: [HELP] Come trovare l'Id di un record appena aggiunto?

Io vorrei trovare l'Id del record appena aggiunto.
Es. IO inserisco un'azienda, quindi faccio una insert nella tabella
aziende (che contiene come contatore progressivo numerico e chiave
primaria l'ID). Subito dopo devo aggiungere i referenti a questa
azienda....quale è il metodo migliore per ritrovare esattamente
l'azienda appena aggiunta??
Grazie
Liga97
E-Mail: 
lig...@alo.it
ICQ: 11362849

l'azienda appena aggiunta??
Io faccio una query con gli stessi parametri appena inseriti, se non e' un
record completamente duplicato (che penso sia un errore) ti restituisce
quello giusto.
Saluti.
Stefano.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Moderatore di it.comp.www.asp
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

quello giusto.
Se utilizzi sql server  è sufficente che esegui una query successiva all'
inserimento con la sola istruzione
"select @identity"
Funziona anche se hanno fatto un inserimento tra la prima e la seconda
istruzione i nambiente multiaccesso.
Ciao
Luther

Anche io....ma cercavo un metodo meno bovino...


ho avuto lo stesso problema con una tabella Access.
per avere la sicurezza di avere l'id giusto (cioe' per evitare di prendere
l'id di un inserimento che puo' avvenire tra una insert e la successiva
select, ho dovuto aggiungere alla tabella un campo che funge da semaforo.
quando faccio l'insert lo metto a vero, quando poi faccio la select lo
posiziono a falso.
In questo modo non faccio l'insert se c'è un record col campo semaforo
settato a vero!
Tutta questa faticaccia.... solo perché non ho ancora trovato il metodo di
fare un lock sulla tabella!!!
Ciao!

 Ciao!
Per quello che ho provato io, semplicemente basta inserire il comando
application.lock e poi farsi tutto quello che si vuole... poi
application.unlock. A me serviva perchè nel global.asa dovevo inserire dati in
una specie di guestbook (dati tipo indirizzo ip, orario di inizio e fine
sessione, ...)
Ciao...
--
| marco -=cil=- rocca
| 
ma...@logicom.it
| ICQ# 12203503

Trovata la soluzione grazie a Fabrizio Accatino...eccola:
  set conn = Server.CreateObject("ADODB.Connection")
  conn.open "nomedb"
  sql = "select * from tabella"
  Set rs = Server.CreateObject("ADODB.Recordset")
  rs.Open sql,conn,1,3
  rs.addnew
  rs("campo1")="val1"
  rs("campo2")="val2"
  rs.update
  response.write("ID:" & rs("ID"))
  rs.close
  conn.close
Ciaoooo


Mi sa che il tuo lavoro e' inutile....
Allora, se ho capito bene  tu fai cosi' (psudo-code):
1:  if nessun rosso then
2:    insert con campo semaforo=rosso
3:    id=select....
4:    set semaforo=verde
5:  else
6:    aspettare... e poi tornare a "1:"
7:  end if
 
Se fai cosi', c'e' un bug! Chi ti assicura che non ci sia un inserimento
di qualcun'altro tra la riga 1 e la riga 2? 
Per fare operazioni con i "semafori" servono istruzioni atomiche: nel
tuo caso una "test & set". Istruzioni che access non ha. 
Per quanto riguarda il "lock" forse trovi qualcosa nelle opzioni di
apertura di una connessione....
  saluti
-----------------------------------------------------
 Fabrizio Accatino                                   
 Web:   
http://www.cclinf.polito.it/~fhtino
 
 
http://www.geocities.com/SoHo/Workshop/2495/
 
 EMail: 
fht...@cclinf.polito.it
 - 
fht...@usa.net
 
-----------------------------------------------------

Ciao...
se devi "lokkare" una variabile nel file .asa, questo è proprio quello che
devi fare. Ben diverso è il lock di una tabella di un db a cui si accede
tramite ODBC.
Comunque grazie!

 Ciaoooo
Caro Liga97, se mandi qualcosa "a nome" mio, almeno mandalo come te l'ho
dato io. La select e' sbagliata! Manca il "where 1=2"!!!
Codice corretto:
  set conn = Server.CreateObject("ADODB.Connection")
  conn.open "nomedb"
  sql = "select * from tuatabella where 1=2"
  Set rs = Server.CreateObject("ADODB.Recordset")
  rs.Open sql,conn,adOpenKeyset,adLockOptimistic
  rs.addnew
  rs("campo1")=tuodato
  rs("campo2")=tuodato
  rs("campo3")=tuodato
  rs.update
  response.write("ID:" & rs("ID"))
  rs.close
  conn.close
Come ho gia' avuto modo di dire (visto che la "where 1=2" l'avevo gia'
sottoposta al gruppo), ribadisco che:
- il codice e' stato testato con db Access e IIS4. 
- il campo ID e' un contatore access
- il piu' delle volte il risultato e' identico sia con "where 1=2" 
  che senza. Mentre e' *SOSTANZIALMENTE* diverso se si eliminano 
  record nella tabella access.
buon divertimento


Inanzitutto scusa, spero che non ti sarai offeso... e poi 
scusa ma che succede se non metto la where, metti che a me non serve?


 scusa ma che succede se non metto la where, metti che a me non serve?
Ma allora non hai capito niente!!!  ;-)))
Scherzo!
Il punto *fondamentale* del codice che ti ho mandato (oltre che al
gruppo) e' la "where 1=2". Il resto sono ca****e.
Spiegazione:
- con la "select * from tuatabella where 1=2" ottieni 
  un recordset vuoto, visto che "1" non e' mai uguale a "2" :-).
- poi su quel recordset fai un addnew e un update
- a questo punto nel recordset c'e' solo e, ripeto, solo il record 
  che hai appena inserito.
- adesso puoi leggere con tutta tranquillita' l'ID appena assegnato.
- se non metti la condizione "1=2" puo' capitare di leggere non 
  l'ultimo ID. Ti assicuro che non e' accademmia. E' la realta'!!!
Ok?!?!?!?
saluti


  l'ultimo ID. Ti assicuro che non e' accademmia. E' la realta'!!!
Come hai detto nell'altro post questo accade se si cancellano dei record
perche' Access va a mettere quelli nuovi nei buchi lasciati dai vecchi e
quindi l'ultimo record della tabella non corrisponde all'ultimo record
inserito.
