30 messaggi dal 06 settembre 2002
Supponiamo di avere due utenti che accedono a un record attraverso pagine ASP e che possano effettuare delle modifiche.

Un problema (un classico) che può verificarsi:
1.l'utente A effettua delle modifiche che vengono salvate;

2. l'utente B, poichè ha scaricato via Internet il record prima che l'utente A avesse effettuato la modifica, non vede le modifiche fatte da A.

3. B fa delle modifiche

4. Le modifiche di A sono ovviamente perse.

Ora esiste il concetto di Transazione, Lock etc etc, ma in tal caso non credo che sia un problema di serializzare le risorse (in tal caso il record) ma fare in modo che l'utente B possa essere avvertito, prima di effettuare le modifiche, che nel frattempo al suo record (visualizzato su una pagina ASP magari da 5 minuti) è successo qualche cosa.

Sarei interessato a sapere come viene affrontato un problema del genere, se esistono degli strumenti ad Hoc o tutto è sulle spalle del programmatore.
Saluti,
Mike
11.886 messaggi dal 09 febbraio 2002
Contributi
Tra i vari cursortype che puoi utilizzare per aprire un recordset, esiste quello Dynamic (2) che provvede ad aggiornare i dati qualora siano stati modificati da un altro utente.
Sfortunatamente conosco questa cosa solo in teoria dal momento che ho sempre usato Access e questo tipo di cursore non è supportato. Se lavori con SQL server fai una prova, potrebbe risolvere i tuoi problemi in maniera più semplice del previsto. Ti basterebbe aprire il recordset in questo modo:

rs.Open "SELECT * FROM tabella", cn, 2, 1

se lo fai con Access verrà usato il cursortype Keyset (1) per cui non vedresti l'effetto.

Ora una considerazione personale:
il problema secondo me si pone solo nel caso in cui devi maneggiare una grossa mole di dati soggetta a frequenti aggiornamenti. Se stai gestendo un piccolo database con qualche migliaia di record la possibilità che si presenti il problema è remota (ogni select dura pochi decimi di secondo, è raro che uno faccia delle modifiche proprio in quel lasso di tempo, al limite usa il locktype PESSIMISTIC (2) che consente l'aggiornamento ad un solo utente alla volta).


Enjoy learning and just keep making
30 messaggi dal 06 settembre 2002
tu mi dici:
"ogni select dura pochi decimi di secondo, è raro che uno faccia delle modifiche proprio in quel lasso di tempo, al limite usa il locktype PESSIMISTIC (2) che consente l'aggiornamento ad un solo utente alla volta).
e infatti non è questo il problema.
Se io utente A scarico via Internet una scheda per modificarla posso modificarla anche fra 5 minuti...in qualche maniera devo essere avvertito se in questi 5 minuti qualcun altro ha modificato i dati su tale scheda.
823 messaggi dal 05 agosto 2002
E' un problema che normalmente viene demandato al database, si parla di "table level locking" e di "row level locking", la cosa può anche essere gestita a livello di applicazione tramite un campo aggiuntivo che contiene il flag lock/unlock.
La cosa che ho descritto interessa le update e le delete, le insert e le select non sono influenzate perchè non modificano i dati, anche se nel caso della select ovviamente si vedono dati diversi in momenti diversi.
Modificato da pabloj il 17 gennaio 2003 17.51 -

Stick to your guns.
Formazione su MySQL o Firebird? Contattami!

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.