Newsgroup: it.comp.lang.delphi
Titolo: Lock su DB Access.

So che l'argomento e' gia' stato trattato, ma vorrei ugualmente sapere se
esiste un modo "serio" per implementare un lock su una tabella di Access e
impedire che piu' utenti modifichino lo stesso record.
Attualmente utilizzo una seconda tabella, contenente la chiave primaria del
record, il nome della tabella, e il nome dell'utente, ma non mi sembra una
soluzione adeguata. Per ogni inserimento o modifica inserisco un record in
questa tabella, e sul BeforePost lo cancello (ma purtroppo non e'
un'operazione "atomica" e se il Post non va a buon fine il record e'
cancellato ugualmente). Potrei aumentare la sicurezza, implementando sia un
BeforePost che un AfterPost, ma non vorrei appesantire troppo il processo, e
penso che la semplicita' sia fondamentale, in questi casi, per evitare di
introdurre errori.
Cercando con google non ho trovato molto sull'argomento (se non consigli di
cambiare DB, cosa che al momento non posso fare).
Grazie mille.

On Wed, 3 Dec 2003 11:11:45 +0100, bigmouth wrote:
i componenti ado forniti con delphi (6) non implementano bene le soluzioni
di locking di ado, quindi innanzitutto ti consiglio di installarti il
TadoBetterDataset se ancora non lo hai fatto (googla un po che lo trovi) .
Poi ti consiglio di leggerti un po di documentazione ado partendo ad esempio
da qui
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm
/mdaenumdm_13.asp
(il link tutto su di una riga)
poichè non è molto chiaro se access supporta bene il locking, o se è ado che
non lo digerisce o delphi. insomma unica cosa è provare un po le varie
soluzioni, leggichiarti i messaggi di borland.public,delphi.database.ado e
vedere come lo hanno implementato gli altri, V. Vassiliev è uno dei +
tecnici sull'argomento.
Vera e propria soluzione pronta non ce n'è, quindi ti devi arrangiare alla
bene meglio, quello della seconda tabella di appoggio non è una pessima
idea, io pure l'avevo incominciata a progettare, ma per mancanza di tempo
non l'ho piu fatta. Se ti sviluppi una classe che te la gestisce in auto,
IMHO è la cosa migliore.
Ciao
-- 
Fabrizio Mancini - <f[.]mancini[@]tin[.]it> 03/12/2003 11.24.50
Open Delphi Manual (
http://groups.yahoo.com/group/delphi_open_manual/
)

 te la gestisce in auto, IMHO è la cosa migliore.
E' quello che sto facendo al momento, e "piu' o meno" funziona, pensavo ci
fossero modi migliori; soprattutto, visto che Access ha un sistema di
gestione dei lock, pensavo di poter utilizzare quello, e temo che il mio
meccanismo possa creare conflitti con quello nativo...

 meccanismo possa creare conflitti con quello nativo...
potresti usare il pessimistic locking che nel tbetteradodataset č
implementato. Perň occhio che ti devi reimportare le librerie di ado, poichč
il tbetter... arriva con il .tlb per ado 2.6. se apri il file di
tbetteradodataset c'č scritto pure come fare se non sbaglio.
Ti consiglio comunque di usare o il tuo metodo senza nessun locking nativo,
oppure di usare solo il locking pessimistico direttamente. In quanto č
l'unico che ti restituisce una eccezione come provi a fare l'edit.
ciao
-- 
Fabrizio Mancini - <f[.]mancini[@]tin[.]it> 03/12/2003 12.01.29


 cancellato ugualmente). Potrei aumentare la sicurezza, implementando sia
un
Metti tutto in una transazione se puoi
-- 
_________________________________________________
Edmondo Di Tucci 
www.powernetsi.it/edmondo
 icq: 228646758
Le vie del signore sono infinite... prendine una e levati di torno!

 Metti tutto in una transazione se puoi
Non riesco a capire cosa c'entri tutto cio'... anzi, una transazione
implementata con i mezzi di Access e' proprio l'ultima cosa che farei in
multiutenza... rabbrividisco al solo pensiero.

 multiutenza... rabbrividisco al solo pensiero.
infatti le transazioni le gestisci con ado non con access. Se non mi sbaglio
ado + access supporta fino a 5 transazioni nidificate, e devo dire che č uno
dei pochi metodi che puoi usare con il lock ottimistico per la multiutenza.
Dall'ultima volta che l'ho provato, cioč quando ho postato l'esempio che
perň (dal mio punto di vista) non era il massimo dell'automazione, funziona
discretamente. Certo non ci ho fatto girare sopra venti utenti... fossi
matto!!! adesso ho un altro problema.. eliminare un db access che si
connette a una fonte odbc che si connette ad oracle...... buaaahhh lo usano
in 60 qui dentro.... sigh sigh sigh sono disperato. Poi si lamentano che č
lento!!
(sto andando in ot)
ciao
-- 
Fabrizio Mancini - <f[.]mancini[@]tin[.]it> 04/12/2003 17.30.39
