Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Gestione di locking,
sabato 07 maggio 2005 - 00.10
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
mgianluca
Profilo
| Junior Member
67
messaggi | Data Invio:
sab 7 mag 2005 - 00:10
Nella gestione della concorrenza in un DB come posso fare?
Ho un db MySql.
Supponiamo di avere 2 utenti che possono accedere ad un record.
L'utente 1 chiede i dati e li carica in un dataset disconnesso.
L'utente 2 chiede i dati e li carica a in un dataset disconnesso.
L'utente 1 effettua le sue modifice sul record ed esegue l'update.
L'utente 2 effettua le sue modifiche ed esegue l'update.
Cosa accade a questo punto? Il record su cui ha operato l'utente 2 non è più
valido in quanto è stato modificato da 1, come reagisce l'applicazione?
Potete aiutarmi?
LudovicoVan
Profilo
| Junior Member
106
messaggi | Data Invio:
lun 9 mag 2005 - 17:34
Ciao gianluca,
> Supponiamo di avere 2 utenti che possono accedere ad un record.
> L'utente 1 chiede i dati e li carica in un dataset disconnesso.
> L'utente 2 chiede i dati e li carica a in un dataset disconnesso.
> L'utente 1 effettua le sue modifice sul record ed esegue l'update.
> L'utente 2 effettua le sue modifiche ed esegue l'update.
> Cosa accade a questo punto? Il record su cui ha operato l'utente 2 non è più
> valido in quanto è stato modificato da 1, come reagisce l'applicazione?
Di base, l'applicazione non "reagisce" e l'utente 2 sovrascrive il record.
Un approccio semplice ed efficace è quello di mettere un Timestamp nella tabella per riportare la data/ora di ultimo aggiornamento del record. Quando l'utente 1 scrive il record, il Timestamp viene aggiornato. Quando l'utente 2 sta per scrivere il record, prima rilegge il Timestamp del record dal db e, poiché non corrisponde più al Timestamp letto in origine, l'aggiornamento del record non viene eseguito e l'utente viene invitato a ripetere l'operazione dall'inizio...
HTH. -LV
LudovicoVan
Profilo
| Junior Member
106
messaggi | Data Invio:
lun 9 mag 2005 - 17:38
P.S. Scusa, dimenticavo: la procedura che verifica il Timestamp ed eventualmente esegue l'update del record dovrebbe essere inclusa in una transazione, altrimenti il problema permane...
mgianluca
Profilo
| Junior Member
67
messaggi | Data Invio:
mar 10 mag 2005 - 14:01
Puoi provare a vedere i miei file per capire come impostare la transaction e se hai qualche suggerimento in più?
mgianluca
Profilo
| Junior Member
67
messaggi | Data Invio:
mar 10 mag 2005 - 14:03
Puoi provare a vedere i miei file per capire come impostare la transaction e se hai qualche suggerimento in più?
LudovicoVan
Profilo
| Junior Member
106
messaggi | Data Invio:
sab 14 mag 2005 - 18:36
Conosco pochissimo MySql, ma dando un'occhiata alla documentazione mi sembra che ci siano due strade.
1) La più semplice, ma solo se hai MySql 5+:
puoi usare la funzione ROW_COUNT() per leggere il numero di righe effettivamente modificate o eliminate. Se vale 0. ovviamente significa che il record è stato nel frattempo modificato o eliminato da qualcun altro.
Ad esempio, per l'update il comando diventerebbe il seguente (tutto in una stringa):
----------------
UPDATE varieta SET descrizione = ?descrizione,
gruppo_merceologico = ?gruppo_merceologico
WHERE codice = ?codice AND timestamp = ?timestamp;
SELECT ROW_COUNT();
----------------
Inoltre hai bisogno di leggere da VB il valore ritornato dalla SELECT, per cui al posto dell'ExecuteNonQuery, ti occorrerà un ExecuteDataset...
Infine ti faccio notare che il Timestamp va aggiornato in caso di update, altrimenti come potrebbe funzionare tutto il meccanismo?
MyCommand.Parameters(3).Value = Date.Now() 'e non Session("Timestamp")!
2) Strada più complessa, ma applicabile da MySql 4+:
si tratta di implementare le transazioni ma anche di fare parecchie modifiche all'impostazione del codice VB che hai... direi di tentare di lasciar perdere questa strada...
HTH. -LV
mgianluca
Profilo
| Junior Member
67
messaggi | Data Invio:
lun 16 mag 2005 - 00:12
grazie milleeeeeee
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !