Newsgroup: it.comp.lang.visual-basic
Titolo: transazioni access

Ciao a tutti, ho un problema con la gestione multiutenza su access, mi
spiego meglio. Praticamente con questo programmino gestisco la modifica
di dati su una serie di tabelle e ovviamente viene usata da più
client. Per bloccare il record che il primo utente decide di
modificare, apro una transazione e chiamo l'update di un record
specifico sperando che mi blocchi solo quello; invece mi blocca una
serie di record, mai un numero preciso, a volte 30 a volte due. Insomma
quanti record vengono bloccatti da una transazione attraverso un update?

salve Bruno,

se non diversamente specificato (e vale solo per ADO e non per DAO), JET 
provvede a bloccare una pagina intera di dati, quindi il numero di righe 
dipende dalla densita' della pagina contenente la riga in modifica..
saluti
-- 
Andrea Montanari (Microsoft MVP - SQL Server)
http://www.asql.biz/DbaMgr.shtm
 
http://italy.mvps.org
DbaMgr2k ver 0.14.0  -  DbaMgr ver 0.59.0
(my vb6+sql-dmo little try to provide MS MSDE 1.0 and MSDE 2000 a visual 
interface)
--------- remove DMO to reply 

 saluti
andrea, non ho mai avuto occasione di testare, ma mi sembrava che il page
lock fosse di access 97, e che 2000 consentisse l'rlock, o almeno cosi'
promettevano. mi sarei aspettato che con le ultime versioni l'avessero
implementato, clipper aveva rlock nel 1990... sono cmq ricordi di quando
usci' access 2000. ricordo male? :)
ciao, a.

 ciao, a.
il lock a livello di riga e' disponibile solo utilizzando il modello ad 
oggetti ADO, specificando prettamente la proprieta'
Connection.Properties("Jet OLEDB:Database Locking Mode") = 1
(il cosidetto Alcatraz mode :D
DBPROPVAL_DL_OLDMODE=0
DBPROPVAL_DL_ALCATRAZ=0
)
che per completezza puo' poi essere mitigata con
Connection.Properties("Jet OLEDB:Locking Granularity") = enum :: 
DBPROP_JETOLEDB_LOCKGRANULARITY
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/oledb/htm/oledbprovjet_provider_specific_properties_in_dbpropset_jetoledb_rowset.asp
ma, ripeto, questo solo utilizzando ADO, visto che il codice DAO e' stato 
congelato precedentemente all'uscita di questa funzionalita', prettamente di 
JET 4
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odeopg/html/deovrpagelevellockingvsrecordlevellocking.asp


 (il cosidetto Alcatraz mode :D
maro', che miniera che sei :)
grazie e ciao, a.

 Scusa, ma che te frega dei blocchi sui recordset disconnessi? ;-)
carico i dati
elaboro i dati
apro transazione
scrivo i dati
chiudo transazione
Ciao 

 chiudo transazione
dove scrivi:
1)sul recordset e poi aggiorni il database
dopo aver lavorato sui recordset locali interessati
2)o la faccenda rimane li'?
nel primo caso penso e spero che il trasferimento
sul file del db sia piuttosto veloce, nel caso 2
non vedo il problema (che e' poi quello che avevo
capito all'inizio).
-- 
ciao, hal

 saluti
La sapevo anch'io cosě, perň mi č venuto un dubbio: come fa il motore a 
sapere quale pagina bloccare quando io faccio una BeginTrans?
Questo in particolare quando uso recordset disconnessi.
Ciao 

 Questo in particolare quando uso recordset disconnessi.
Scusa, ma che te frega dei blocchi sui recordset disconnessi? ;-)
-- 
ciao, hal

 sul file del db sia piuttosto veloce
Ma tu mi _impari_ che le transazioni servono anche per assicurarsi che 
l'intero blocco d'aggiornamento vada a buon fine.
Ciao 

 Questo in particolare quando uso recordset disconnessi.
il dubbio e' presto risolto... non lo fa, visto che il lock a livello di 
riga e' valido solo per connessioni serverside con cursori pessimistici :)


 l'intero blocco d'aggiornamento vada a buon fine.
Il blocco (block) di aggiornamento non c'entra pero' con il blocco
(lock) del record per impedire l'accesso di altri utenti.
E' pur vero che parlare di multiutenza con Access ha senso
tanto quanto parlare del latte di gallina ;-)
-- 
ciao, hal

 tanto quanto parlare del latte di gallina ;-)
Che leggendo Paperino (quello Disney) ho scoperto essere un fiore.
E poi dicono che i fumetti sono storielle per bambini :)
Ciao 

 Che leggendo Paperino (quello Disney) ho scoperto essere un fiore.
Vediamo se ti ricordi cos'era lo Spadone ;-)
Bye, G.


Qui il confine tra nick e persona(ggio) si assottiglia :)
Ciao