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
Accesso esclusivo
martedì 24 gennaio 2006 - 16.50
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
lordwaizard
Profilo
| Senior Member
294
messaggi | Data Invio:
mar 24 gen 2006 - 16:50
Ho più client che visionano la stessa tabella.
Il programma dovrebbe selezionare la prima riga disponibile e assegnarla all'operatore che la richiede impostando la voce denominata UTENTE(NVARCHAR) il nome dell'utente.
Ora la mia preoccupazioni è quella che nel tempo della modifica, un'altro client esegua la stessa operazione aggiornando la medesima riga.
Il mio obbiettivo è quello di far in modo che ogni riga debba essere assegnata esclusivamente a un utente.
E' possibile?
Scusate per la domanda da principiante.
Grazie
Davide
Cteniza
Profilo
| Guru
1.509
messaggi | Data Invio:
mar 24 gen 2006 - 19:52
Se usi msde o sql server hai il tipo rowversion (ex timestamp) che se utilizzato opportunamente ti indica se la riga che stai modificando / cancellando è la stessa che hai letto.
Su ado.net la gestione dei dati è disconnessa e vige la regola che chi arriva per primo per primo fa gli aggiornamenti.
Giamp72
Profilo
| Junior Member
115
messaggi | Data Invio:
mer 25 gen 2006 - 10:54
se usi mySql potresti utilizzare le istruzioni lock e unlock.
sql per il lock
Lock Tables nomeTab WRITE
sql per unlock
UnLock Tables
Io ho risolto un problema analogo al tuo in questo modo:
il primo che arriva esegue il lock sulla tabella da aggiornare, fa i suoi ragionamenti e poi aggiorna il campo.
In questo lasso di tempo, se qualche altra query viene fatta su questa tabella, viene messa in coda...
quando la prima stazione esegue l'unlock, le altre stazioni che erano in coda vengono sbloccate..
Giamp72
Cteniza
Profilo
| Guru
1.509
messaggi | Data Invio:
mer 25 gen 2006 - 11:58
Non si tratta della stessa cosa!.
Su mysql con quelle istruzioni l'ultimo che arriva esegue l'aggiornamento.
Su sql server/msde ogni volta che fai un aggiornamento il valore del campo timestamp/rowversion viene cambiato e solo il primo che arriva esegue l'aggiornamento, quelli che arrivano dopo si beccano un bel errore.
lordwaizard
Profilo
| Senior Member
294
messaggi | Data Invio:
mer 25 gen 2006 - 12:39
In alternativa non si può fare una unica query che legga e aggiorni in automatico riducendo così il processo
In questo momento la risolvevo così:
LEGGO
il programma rileva l'ID e invia
UPDATE
Non è possibile creare una query che esegua:
La prima riga libera (E SOLO QUELLA) aggiorna le seguenti celle
Dite che sia possibile?
Cordiali saluti
3S/Davide Fiorani
NB
Db utilizzato MSDE/MSSQL
Cteniza
Profilo
| Guru
1.509
messaggi | Data Invio:
mer 25 gen 2006 - 13:28
Nella tua situazione se ci sono due postazioni diverse che inviano degli aggiornamenti entrambe riescono nell'impresa.
Questo perchè la tua struttura non tiene conto del rowversion.
Secondo me dovresti trasformare la tua query in:
UPDATE mytable SET campo = valore WHERE ID = myid AND [timestamp] = mytimestamp
(stessa cosa per delete)
In questo modo solo il primo che arriva ha il valore di timestamp corretto, ad ogni aggiornamento msde aggiorna il valore del campo timestamp un successivo aggiornamento con il medesimo timestamp non avrebbe luogo.
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 !