Newsgroup: it.comp.lang.visual-basic
Titolo: Database Exclusive

VB4 - 16 bit
Situazione: rete Novel con 1 Server e 2 Client
per i Client ho 1 PC pentium ed 1 PC 486
Sul server ho una directory condivisa in lettura/scrittura,
dove tengo il Database (Dati.MDB)
In compilazione ho settato 
Exclusive = False
Problema:
Se cerco di aggiungere nuovi record alla stessa tabella aperta da entrambi
i client,
ottengo l'errore 3186
Non ho problemi se aggiungo record a tabelle diverse dello stesso Database
Che te ne pare?
Se hai consigli/soluzioni scrivi pure direttamente a
pr...@replicacremona.com

ottengo l'errore 3186
L'errore 3186 e':
Impossibile salvare. Attualmente bloccato dall'utente <nome> sulla macchina
<nome>
Cause possibili:
Si è cercato di salvare un record in una pagina di database di 2 KB
attualmente bloccata da un altro utente. Attendere che l'altro utente
termini di utilizzare il record, quindi ritentare l'operazione.
(comunque questo lo trovi anche nell'help in linea...)
Ho avuto anch'io questo e altri problemi.
Causa:
il JET (database engine di Access) usa per default un lock a pagine (di
2KB).
inoltre, sempre per default il lock e' di tipo pessimistico: ossia la pagina
e' bloccata dal AddNew (o Edit) all' Update.
La cosa bella e' che, per bachi vari del JET (almeno quello che si usa con
VB4 a 16bit), la pagina non si sblocca nemmeno dopo (ma questa e' un'altra
storia)...
Soluzione (probabile):
Usa il lock ottimistico (la pagina non rimane bloccata fino all'Update).
Per settare il tipo di lock devi utilizzare la proprieta' LockEdits del
RecordSet.
ulteriori istruzioni le trovi nell'help in linea (cerca LockEdits).
ciao
Roal Zanazzi
z...@iol.it
La soluzione

 Non ho problemi se aggiungo record a tabelle diverse dello stesso Database
Problemi di locking (chissa` perche` non esiste un lock a livello di
record!!!) del Jet.
Io ho risolto il problema cosi:
1) uso il lock "ottimistico"
2) Ho fatto una funzione che esegue l'update, e in caso di errore devivante
dal locking, ritenta per n volte consecutive (con intervallo di .5 secondi tra
i tentativi).
--
Bye. __Andy__
AntiSpam: Remove gongolo from E-Mail address

i tentativi).
In non ci ho capito niente. Utilizzando i datacontrol forse il
discorso cambia ?
Compunque ho messo nelle options (DataControl) = 512 (DbSeeChanges )
Ho settato Data1.Recordset.LockEdits = False
In questo modo il lock dovrebbe essere pessimistivo ovvero al
Data1.recordset.Edit  se il record e' gia' editato  da un altro utente
dovrebbe darmi errore ma la cosa strana e che a volte va altre no.
Che fare ???
Antonio Tanzillo  
a...@pippo.netgroup.it
KillPippoforrepondez


Il discorso è semplice, Access non ha il blocco del record singolo e questo
è scandaloso.
Questo vuol dire che se tu hai una tabella dove i record occupano 0,2k
ciascuno quando utilizzi il metodo Edit per bloccare il record questo ti
blocca 2K di record ovvero 10 record nel nostro caso.
Vuoi una conferma??? Lancia il tuo programma e Access. Applica il metodo
Edit al record che vuoi modificare e da Access prova a cambiare il record.
Vedrai sulla griglia ( a sx) il disegno di vietato l'accesso, significa che
il record è bloccato. Anche passando ad altri record contigui vedrai che n
record sono bloccati (per 2k). Per ovviare a questo puoi:
-utilizzare blocco ottimistico (dipende che applicazione devi fare)
-Creare un record che occupi 2k (chiaramente spreco di spazio ma se il DB è
piccolo forse ne vale la pena
-cambiare DB
Per altre spiegazioni scrivimi pure