Newsgroup: it.comp.lang.delphi
Titolo: [Access + ADO] Qualcuno mi potrebbe spiegare....

Ciao,
qualcuno mi potrebbe spiegare come si
gestiscono le multiutenze con ADODataset?
Come posso bloccare la modifica se il record e'
gia' aperto da un altro utente?
Le modifiche fatte da un cliente sono immediatamente visibili anche
dalle altre postazioni o c'e' da fare un qualche refresh?
Andrebbe bene anche un link...grazie!
D5 + ADO + ACCESS 97 (file)
ps Sto modificando un gestionale che si appoggia su access e
non posso cambiare il db.
Miyomo

 gia' aperto da un altro utente?
Ciao, se hai pazienza il weekend stavo mettendo insieme una piccola raccolta
di codice per gestire la multiutenza con ado e arcess. Allora la questione è
la seguente:
imposti la connessione con lock aduseserver o qlcsa del genere
gestisci il tutto con le transazioni sulla connessione.
quando il record va in edit fai una prova di post sul record stesso e se ti
restituisce errore allora mandi l'utente afff.. ehm gli dici che il record è
gia in uso, altrimenti procedi tranquillamente. 
io avevo anche messo un timer per la gestione degli edit in modo che se
l'utente si alzava dalla postazione lasciando in edit il record, questo dopo
x minuti sbloccava automaticamente la transazione.
il discorso va approfondito un attimo, e se porti un po di pazienza lunedi o
martedi cerco di mettere insieme i pezzi.
ciao fabrizio

ciao fabrizio
Ti sto curando, anche io sono in attesa del tuo post chiarificatore sul ng.
Nell'attesa, vi anticipo i miei risultati delle n prove che sto facendo in
questi giorni.
Lock singolo record: una chimera per tutti gli access, tranne che per il 2000.
Utilizzare assolutamente componenti ado, la adocnnection deve avere come
provider Microsoft.Jet.OLEDB.4.0
Sul Dataset (adotable) impostare cursori lato server (clUseServer), e tipo di
lock ltPessimistic (sto andando a memoria).
Questa e' l'unica maniera (senza agire sul codice) per impedire che un utente
vada in edit sullo stesso record gia' aperto da un altro.
Controindicazioni: 
1) solo con access2000
2) lentissimo a lanciare l'eccezione di record bloccato 
3) non sono ancora riuscito a capire come isolare l'eccezione 2) e
trasformarla in un warning piu' user frinedly per l'utonto.
(dovrei scomporre l'ecxeption e analizzarne il contenuto, ma qui nebbia..)
4) in alcuni casi, microsoft dichiara che troppe connessioni potrebbero
condurre il monitor all'esplosione. (morde-cazzata del venerdi' pomeriggio...)
ciao
-- 
Morde. 
(morde at programmer dot net)

 Ti sto curando, anche io sono in attesa del tuo post chiarificatore sul ng.
Si ma non ti credere che sia una manna dal cielo! =))) io ho trovato un
sistema per sollevare una eccezione, anche se non dovrebbe servire. comunque
funzionava!
mi sono messo a guardarlo ieri sera verso mezzanotte, ma sono dieci giorni
che faccio baldoria portando a spasso l'ospite (donna naturalmente senno
corca che me sbobbavo io per dieci giorni!!!!) per milano e dintorni, quindi
avevo una mancanza di sonno notevole, e sinceramente ci ho capito poco del
copia incolla che ho fatto!!!
lunedi, max mart cerco di mandarlo
ciao fabrizio

ciao fabrizio
^___^


dalle altre postazioni [...] ?
Ovviamente no.
Non ricordo nello specifico come lavora ADODataSet, sto lavorando
prettamente con Interbase e Firebird usando IBExpress, ma una risposta
si può dare, a livello generale.  Questo tipo di problemi si risolve
con il lock pessimistico, che però in un ambiente in cui gli utenti
sono davvero tanti può essere a volte problematico.  Se usi un
ADODataSet collegato a un ClientDataSet, la gestione di questi
problemi ricade sul provider.  Ma il provider segue la antica strada
che consisteva nel leggere il record e consentire di andare in
modifica, all'atto di consolidare le modifiche, poi, si verifica che
il record sia ancora nello stato precedente, dopodichè, nel caso nel
frattempo sia stato modificato si avverte l'utente, altrimenti si
procede normalmente.  Bisogna necessariamente rileggere i dati al
momento della scrittura delle modifiche (immagina di dover scalare
delle quantità da un magazzino).  Le modifiche, in generale, non sono
immediatamente visibili alle altre postazioni.