Newsgroup: it.comp.appl.access
Titolo: Modifica contemporanea di record

Ciao a tutti!
 
Il mio db è diviso in be e fe.
Al be accedono 5 utenti e a volte accade di dover lavorare nello stesso record.
Pertanto il msg che appare è:
 
"Durante la corrente sessione di modifica il record è stato modificato
da un altro utente. Salvando le proprie ecc ..."
 
Come posso gestire la modifica contemporanea di record? 
 
Sarebbe sufficiente informare l'utente che accede allo stesso record semplicemente con una messaggio "record temporaneamente bloccato"
 
Che tipo di istruzione mi suggerite?
 
Ciao Chita
 
 
 


Quello che vedi è la gestione della contemporaneità di Access, e non ha grossi problemi. Se vuoi gestirla tu, ci sono molte vie. La prima che mi viene in mente è quella di lavorare con maschere non associate. Dall'elenco dei record, l'utente seleziona quello che deve modificare, e lo apri in una maschera nuova. Il recordsource sarà una cosa tipo "SELECT * FROM....WHERE Cod=....". Ricordati che stai lavorando non associato, quindi assegni ad ogni campo il valore con un recordset. Poi, quando salva tutto, ripeti la SELECT ma nella condizione WHERE metti TUTTI i campi della form. Se trova il record, allora nessuno lo ha modificato e lo puoi salvare. Se non lo trova (=qualcuno ha cambiato almeno un campo), chiedi cosa fare (sovrascrivo? Lascio perdere tutto?). Questa è, a mano, la stessa gestione che Access ti suggerisce con quella finestrella. Ci sono charamente altre vie

Il giorno venerdì 15 marzo 2013 19:04:13 UTC+1, Chita ha scritto:

Ciao e grazie della risposta...
Siccome mi dici che potrebbero esserci altre vie...
Che comando vba potrei utilizzare per verificare che all'apertura della maschera il record è bloccato da un'altro utente?
 
Ciao Chita


Mi dici prima perchè nn ti piace la finestrella di Access???? Ci pensa già lui....

Il giorno venerdì 15 marzo 2013 19:04:13 UTC+1, Chita ha scritto:

Ciao,
le maschere sono tutte associate, quindi esiste la possibilità che l'utente pluto modifichi un record e allo stesso tempo l'utente pippo modifichi il medesimo record, la finestra di access mi potrebbe andare bene ma permette ad entrambe di scrivere nello stesso record.
Solo all'uscita mi compare la finestra; SALVA - NON SALVARE  - COPIA IN APPUNTI.
Ecco perchè hai miei colleghi nn piace la finestrella di Access.
 
La richiesta che mi è stata avanzata è quella di bloccare prima che l'utente modifichi il record, se l'altro utente lo sta modificando.
 
Secondo te con le maschere associate...un codice di vba per gestire quanto sopra???
 
Ciao Chita


Con le associate non ho mai avuto problemi. Se apri lo stesso record su 2 macchine diverse, uno salva, l'altro tenta di salvare Access ti blocca. Ti dice di richiamare il record. Se proprio devi puoi implementare dei semafori: tabella con campi testo (tabella e id). Quando un utente apre un record, prima cerca nella tabella. Se non trova nulla, allora scrive il record (tabella e id) che sta per usare, poi apre il record. L'altro pc, va a leggere la tabella, trova il record che vorrebbe aprire (quindi c'è qualcun'altro che lo sta usando), e appare un msgbox che ferma l'utente. Non è un gran metodo (non garantisce l'atomicità) ma se implementato bene funziona. Ma penso sia più invasivo del primo che ti ho suggerito. Non so da vba come vedere i lock (in DAO per lo meno). Forse con ADO si può, ma non saprei. Potresti aumentare il livello di blocco record nelle proprietà di Access, ma porta più problemi che vantaggi