Newsgroup: it.comp.lang.delphi
Titolo: Lock record su Access 2007

Salve,
ho la necessità di impedire la modifica simultanea di un record su un db di 
rete (Access 2007). Ho trovato in vecchi post la possibilità di impostare la 
locktype della mia AdoQuery a ltPessimistic e la CursorLocation a 
clUseServer.
Purtroppo anche così facendo il record non viene bloccato e più utenti 
riescono a modificarlo contemporaneamente.
Che strada devo seguire con Access?
Grazie 

 Grazie
Personalmente avevo scelto la strada del "controllo manuale" ovvero in ogni 
tabella avevo inserito 4 campi iniziali che definivano se il record era 
libero o bloccato, l'ultimo tipo di intervento (inserimento, modifica), data 
e ora, nome utente in accesso.
Poi mi bastava leggerne lo stato ad ogni richiesta dei vari client.
Non conosco la portata del tuo software, nel mio caso è finito in una 
carrozzeria che si gestiva le sue pratiche da quattro postazioni diverse e 
in 5 anni non si sono mai verificati problemi di accesso...non saprei nel 
caso di più postazioni
Ciao
V

 rete (Access 2007).
Il lock pessimistico non è quasi mai una buona scelta, in un ambiente
multiutente. Perché hai questa necessità?
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Quello che devo fare è impedire la modifica contemporanea della scheda di 
lavoro visualizzata. Il primo client che visualizza la scheda va in edit e 
tutti gli altri possono solo visualizzare quella scheda fino a che non c'è 
il post.
Per fare in modo sbrigativo pensavo che impostando la Locktype della mia 
AdoQuery a ltPessimistic e la CursorLocation a clUseServer avrei risolto, ma 
in realtà i client riescono a entrare in edit contemporaneamente sullo 
stesso record.
Forse devo tentare un approccio manuale come quello che mi ha consigliato 
Valter?
"Andrea Laforgia" <x...@xx.xx> ha scritto nel messaggio 
news:g3t2je$irv$1...@news.newsland.it...


 Poi mi bastava leggerne lo stato ad ogni richiesta dei vari client.
Dal punto di vista logico la tua soluzione è valida, io volevo solo trovare 
una strada più veloce senza rimettere mano alle tabelle e visto che ADO 
permette il Lock (almeno teoricamente perchè a me non funge) volevo tentare 
così.
Probabilmente a questo punto seguirò la tua indicazione
Ciao 

 Poi mi bastava leggerne lo stato ad ogni richiesta dei vari client.
Mi sorge un dubbio perň. Se il pc crasha, oppure va via la corrente mentre č 
in visualizzazione/blocco un record come fai? Rimane bloccato a meno che non 
inserisci una procedura di reset? 

 non inserisci una procedura di reset?
Esatto, ma avevo considerato anche questo.
Nel menu dell'interfaccia grafica avevo inserito la possibilità di sbloccare 
il record con non uno ma ben due messaggi di avviso all'utente (se sei 
sicuro di voler sbloccare il record + ulteriore conferma) oltre ad un 
controllo in fase di login.
Se poi vuoi essere certo che un domani il cliente non ti racconti una cosa 
per l'altra considera la possibilità di utilizzare un file di log dove 
riportare le scelte fatte dall'utente in situazioni delicate come queste. 
Carta canta!
:-)
V 

il post.
Questa non è una buona scelta. In un contesto multiutente fai bene a
non bloccare mai nessuno in maniera pessimistica. Tu consenti a tutti
di entrare in modifica, poi le modifiche verranno confermate da uno
solo. Se usi i CDS puoi controllare automaticamente la concorrenza. 
Al secondo utente viene al limite negata la conferma e viene richiesto
di "conciliare" con i dati salvati dal primo utente.

controllo in fase di login.
Queste sono "pezze". Se si evita a monte il lock pessimistico si fa un
favore a tutti.

 di "conciliare" con i dati salvati dal primo utente.
Mah, io non la considero una pezza bensě un corretto modo di gestire le
concorrenze.
Perchč ritieni sia meglio permettere ad esempio a tre utenti
contemporaneamente di effettuare delle modifiche ad un record e poi segarne
via due pur se chiedendone prima la conciliazione? Non lo capisco, mentre il
record č bloccato gli altri due utenti possono occuparsi di altre mansioni
senza ad esempio inserire tutti e tre gli stessi identici dati con relativa
perdita di tempo (e soldi per un'azienda)...
Non č forse meglio avvertire l'utente che il record č in modifica ad opera
di un'altro operatore? Si presuppone che l'operatore che sta effettuando la
modifica sappia quello che sta facendo...
Dove sta la cattiva scelta?
V

Dove sta la cattiva scelta?
Vedi sopra.