Newsgroup: it.comp.www.asp
Titolo: Lock del DB durante un task

Ciao,
Volevo sapere come si fa via ASP a mettere in lock il DB per un task che sta
effettuando un'operazione di aggiornamento sul DB.
Mi spiego meglio :
Vorrei fare in modo che per un dato momento il DB su cui sto effettuando
delle operazioni di aggiornamento da una pagina ASP non sia accessibile da
altri utenti, alla fine delle operazioni poi rilascio la risorsa anche agli
altri utenti.
Come sia fa ?
Grazie,ciao.
P.S.
Il db in questione è ACCESS.
Mi serve fare quest'operazione perchè devo recuperare il valore di un contatore
da una tabella su cui ho appena fatto la insert :
Devo fare una doppia INSERT su due tabelle (A e B).
la tabella A è legata con una relazione 1 a n con la tabella B (es. testata fattura
- tabella A - dettaglio fattura - tabella B - ) e nella B inserisco dei dati che
specificano quelli + generici della tabella A,ovviamente il legame tra le due è
l'ID - contatore - della tabella A.
il codice d'inserimento è semplice :
 
Insert della tabella A, select MAX della tabella A per avere il valore del contatore,
insert della tabella B con il valore della MAX per L'ID di relazione + i valori
specifici della tabella B.
 
Problema :
Se ho + utenti che fanno la stessa operazione rischio di non avere il valore del
contatore corretto(quando faccio la max),perchè magari in quello stesso istante
è stata fatta un'altra insert da un altro utente.
 
Ho due possibili soluzioni(credo) :
 
Trovare un modo certo di avere il valore corretto del contatore appena inserito
per quel task di elaborazione(tramite storedprocedure in SQL so che si può fare)
 
Loccare le due tabelle per quel task prima delle tre operazioni e rilasciarlo appena
terminate.
 
--
Enjoy the .NET community! ASPItalia.com
 
http://forum.aspitalia.com/
 
http://www.aspitalia.com/

 che sta effettuando un'operazione di aggiornamento sul DB.
dovresti aprire una transazione o alivello di pagina... o livello di db...
:) ma nons ono sicuro che access supporti il commit... :)
-- 
Lino Mari [mod - it.economia.e-commerce]
http://www.ebow.it
 - e-business on web!
http://www.dev2dev.it
 - La rete ha connesso nuove particelle - d2D004
Oggi, l'organigramma è fatto di link, non di gerarchie.
Il rispetto per la conoscenza vince su quello per l'autorità astratta.

 :) ma nons ono sicuro che access supporti il commit... :)
Lo supporta ... !!
Però ti consiglio, invece di bloccare il db (brutto e controproducente se
hai parecchie utenze) di sostituire la prima INSERT (quella di cui ti serve
l'ID) con un Recordset :
Dim iID, RS, Cnn
Cnn .... 'APRI LA CONNESSIONE
Set RS = Server.CreateObject("ADODB.Recordset")
RS.Open "SELECT * FROM *tabella*", Cnn, 1, 2
    RS.AddNew
    RS("Campo1") = Valore 1
    RS("Campo2") = Valore 2
    RS("Campo3") = Valore 3
    iID = RS("ID")
RS.Update
RS.Close
Set RS = Nothing
In questo modo sei certo di avere l'ID che ti serve, senza bloccare il db !!
Ciao !

 il db !!
dipende... se l'operazione e' una... il problema non si pone... ma se sono
di piu'... allora non ci sono molte alternative... a meno che non si hannoa
disposizioni le SP...
-- 
Lino Mari [mod - it.economia.e-commerce]
http://www.ebow.it
 - e-business on web!
http://www.dev2dev.it
 - La rete ha connesso nuove particelle - d2D004
Oggi, l'organigramma č fatto di link, non di gerarchie.
Il rispetto per la conoscenza vince su quello per l'autoritŕ astratta.