Newsgroup: it.comp.appl.access
Titolo: [?] Database Condiviso e Contatori

Ciao a Tutti!!!!
Ho un piccolo problema con un database utilizzato da più utenti
contemporaneamente. Il problema è il seguente e lo spiego con un esempi.
Ho una Tabella Clienti con: IDCli (contatore) e Nome. Ho una maschera
legata a questa tabella che utilizzo per inserire i dati.
Il problema sorge quando due utenti aprono contemporaneamente la
maschera per effettuare una aggiunta; purtroppo access non blocca in
qualche maniera il nuovo record e così entrambi gli utenti avranno come
id lo stesso numero. Per il momento ho risolto il problema salvando il
record appena viene aperta la maschera, ma la soluzione non mi sembra
molto elegante, inoltre preferirei avere un metodo che mi consentisse di
utilizzare un contatore generato da me.
Potrei benissimo anche slegare la maschera e fare poi l'update via SQL,
ma non so se così funziona come dovrebbe.
Dividendo il DB in BE-FE il problema rimane? E' possibile in qualche
modo lockare una tabella?
Grazie a chiunque saprà darmi consigli, sono un assiduo lurkatore (anche
se non posto) e devo dire che questo è sicuramente il ng più
interessante che seguo.
Saluti,
Roberto Ukmar


1) E' sbagliato a priori utilizzare un tipo campo "Contatore" per
    le chiavi primarie di tabelle quando il campo stesso lo vede
   l'utente; al riguardo quardati le FAQ apposite sul Sito Comune.
2) Se comunque imposti la chiave primaria ad un tipo "Contatore"
    non c'č verso di fargliene fare 2 uguali se non forzandolo
    esplicitamente per mezzo di una insert into.
3) Con Access fino alla ver. 97 puoi loccare un'intera tabella
    o una pagina di record in memoria di 2k (la jet4 di Access2000
   invece permette di loccare anche il singolo record); in ogni caso
   il tuo problema non č cosa loccare ma **quando** farlo; devi
   utilizzare un lock **pessimistico**.
4) La struttura classica che va bene in tutti i casi č utilizzare
     una tabella "Progressivi" in cui memorizzarsi l' ultimo
     valore del progressivo che ti occorre. Sull' evento BeforeUpdate
    della tabella che stai gestendo locchi il record progressivi, lo
    incrementi di uno, assegni il progressivo che ti occorre e rilasci
    la tabella progressivi; t'assicuro che non avrai mai valori duplicati
    con cui scornarti.
Bye, Ste

 Bye, Ste
Grazie ancora,
Roberto Ukmar

:(
Certo, ovviamente era l'evento di maschera (agganciata a tabella)...
Bye, Ste

Salve e perdonate l'inserimento.
Nel mio protocollo ho risolto la duplicazione di numeri di protocollo con il
comando Me.Refresh prima della macro di generazione del numero. Cosě ho
ottenuto il messaggio di duplicazione di valore univoco che appare alla
chiusura del record.
E' concettualmente corretto?
E di piů, non č  mica un OT? Il che mi dispiacerebbe, per il disturbo
arrecato.
--
Saluti
Massimiliano

1)Potresti gentilmente mandarmi la sintassi di come aprire un
recordset    lockato com "dbPessimistic"? Ho smanettato un po' con
l'help ma quando   mi metto a scrivere mi da' errore 3001!
2)Fino a quando dura il lock? Viene attivato dalla Edit e viene
disattivato da?
Grazie
-- 
Roberto Ukmar Morlacchi                    
Tutor presso il Dipartimento di Scienze dell'Informazione   
email:   
roberto.u...@writeme.com


E' più semplice utilizzare la prorietà LockEdits (almeno x me),
basta impostarla a true/false appena prima della Edit.
LockEdits = true:  pessimistico, il blocco comincia con la edit
                               e termina con l' update
LockEdits = false: ottimistico, il blcco viene eseguito solo sul
                                metodo update.
Bye, Ste


Non è neppure OT, e cmq nessun disturbo!
Bye, Ste

Grazie per la disponibilita' ;-)
Roby
-- 
Uki
--
Roberto Ukmar Morlacchi                    
Tutor presso il Dipartimento di Scienze dell'Informazione   
email:   
robert...@writeme.com
 

Grazie per la cortesia.
--
Saluti
Massimiliano