Newsgroup: it.comp.appl.access
Titolo: scrittura simultanea record - la mia idea

ho creato una tabella di appoggio di nome documentiBloccati
in cui salvo tre valori idDocumento, IdOperatore, TabellaOrigine
 
quando un operatore da un elenco di record ne apre uno eseguo un controllo che verifica se tale record è già presente nella tabella di appoggio, se è presente non gli consente di aprirlo altrimenti lo apre e aggiunge quel record nella tabella di appoggio
 
 
quando l'operatore chiude la form elimino questo record dalla tabella di appoggio rendendo nuovamente libero quel record di quella tabella
 
a me pare funzionare bene, vi sembra una buona idea?
 
come gestiscono sql server e mysql le scritture simultanee? in modo più serio senza necessità di questi trucchi? grazie.


è una buona soluzione, la usa un noto software per agenzie viaggi.
l'unico fastidio era che ogni tanto sentivo le segretarie chiamarsi e 
dire "mi chiudi la cartella xxx che ci devo accedere?"
 
devi però gestire il caso in cui il client crascha per qualche motivo e 
ti rimane la riga del bloccaggio record nella tabella...
 
un'idea potrebbe essere che ad ogni apertura del client, viene eseguito 
un delete di tutti i record di quella tabella legati al client in modo 
che si risblocchi tutto.
 
sperando che l'utente riapra il programma dopo il crash.
se invece se ne va a casa ti rimane il record di blocco nella tabella.
 
dovresti per questi casi prevedere una maschera "amministratore" che 
permetta di cancellare a mano i blocchi
 
 
BFS
 
 
 

Senza tabelle di appoggio... si usa un CAMPO Boolean di Bloccaggio, ma la logica è la medesima.
 
La parte complicata è quella di RESETTARE in modo ben fatto il Bloccaggio, sia fatto con Tabella esterna che con Campo Flag, e questo deve passare per gestioni TRANSAZIONALI.
 
@Alex

Il 05/05/2022 17:13, mario rossi ha scritto:

Hai descritto una sequenza di passaggi, ma non e' chiaro quale sia 
l'obiettivo che desideri raggiungere
Vuol essere forse una specie di multiutenza per "elenco di record" ?
 
 


esatto ho previsto un area administrator con un pulsante "Sblocca documenti" che elimina tutto nella tabella di appoggio.
 
grazie.


A me TRANSAZIONALI non lo dici! 
Ho capito ho una nuova missione scoprire cosa significa questo nuovo termine.
 
Scherzi a parte ho provato con il campo di tipo boolean sul record stesso ma a volte chiudendo il record e tornando all'elenco record se l'altro utente ha aperto anch'esso l'elenco record mi uscivano messaggi tipo "i record sono stati modificati" credo avrei dovuto in qualche modo forzare un requery agli altri client per evitarlo ma la soluzione tabella di appoggio  non mi ha creato questo problema.


l'obiettivo finale è quello di impedire a tutti gli utenti di aprire un record se un utente ha già aperto quel record, perché altrimenti capita che lo aprono in due ci scrivono contemporaneamente e capita che il database si danneggi.

 Scherzi a parte ho provato con il campo di tipo boolean sul record stesso ma a volte chiudendo il record e tornando all'elenco record se l'altro utente ha aperto anch'esso l'elenco record mi uscivano messaggi tipo "i record sono stati modificati" credo avrei dovuto in qualche modo forzare un requery agli altri client per evitarlo ma la soluzione tabella di appoggio non mi ha creato questo problema.
 
Si certo, oltre alla PK, se usi la Tabella di servizio per gestire il Blocco, suggerirei di usare altri 2 Campi...
Data/Ora
User
 
In questo modo potrai gestire altre casistiche più rognose, come quello che entra in un Record e lo Blocca per tutto il giorno perchè poi lascia il PC e va a fare altro... ecc...
 
@Alex


Vediamo se ho capito, potrei impostare l'intervaltimer della form del record aperto ad esempio a 20 minuti (1200 ms) metto su evento timer della form del record aperto un codice chiude la form salvando e elimino il record dalla tabella di appoggio liberando cosi il record per gli altri utenti?


Non e' sufficiente gestire l'errore che ti salta fuori quando altri 
utenti vedono  "i record sono stati modificati" ?

 utenti vedono "i record sono stati modificati" ?
 
Siamo certi sia generato errore...?
Per gesire con un Flag esterno, il Recordset deve essere impostato con aggiornamento Ottimistico, quindi temo non uscirebbe nulla, ma anche uscisse... sarebbe nell'altro PC non in quello che lo sta editando...
 
@Alex

Visto che sei amante del Copia/Incolla...
https://docs.microsoft.com/en-us/office/vba/access/concepts/miscellaneous/detect-user-idle-time-or-inactivity
 
 
@Alex

 a me pare funzionare bene, vi sembra una buona idea? 
 
 
Quindi le Forms che svilupperai in futuro non utilizzeranno i Bound Controls di Access ... mah
 
Saluti
 
P:S: Che vantaggi pensi di ottenere con questa strategia?
 
 
 
 


Se pc1, pc2, pc3 entrano in visualizzazione dello stesso record, e pc1 
lo modifica e salva, mi risulta che al tentativo di pc2 o pc3 di 
cambiare quel record venga scatenato un errore, la cui descrizione in 
sostanza e' "..il record e' stato modificato da altro utente.." ora non 
ricordo il numero ma e' quello li
Gestendo l'errore rilevato da pc2 e/o pc3 si dovrebbe risolvere il 
problema lamentato dal sig rossi (intendo dire senza usare tabella 
intermedia)


confermo esce nell'altro, e per evitare di farlo uscire, anche perché non saprei come gestirlo, ho optato per quella tabella di appoggio che non tocca i campi della tabella in questione.


Non bastavano i TRANSAZIONALI, qui mi si parla pure di BOUND CONTROLS
cosa sono questi altri sconosciuti?


Si però anziché gestire un errore mi è sembrata una buona soluzione utilizzare la tabella di appoggio.


A mio avviso gestire quell'errore su altre postazioni e' LA soluzione 
del problema
Si evita di usare tabelle aggiuntive ma soprattutto credo funzioni 
meglio di altre soluzioni che sono basate sempre sul 'leggi qualcosa e 
se possibile blocca' e tra le due operazioni c'e' sempre la possibilita' 
che altre postazioni eseguano stessa operazione e 'credano' di poter 
bloccare il record

 cosa sono questi altri sconosciuti?
 
 
Semplicemente, la tua idea di gestione autarchica dei conflitti di scrittura sottende  al non utilizzo dei controlli associati di Access (Bound) nelle forms.
E a fronte di un tal pandemonio quali sarebbero i vantaggi che speri di ottenere?
 
Saluti
 

 
  la tua idea di gestione autarchica dei conflitti di scrittura sottende 
  al non utilizzo dei controlli associati di Access (Bound) nelle forms.
 
perchè questa affermazione?
 
la form può benissimo essere associata a mio avviso.
 
sull'apertura lui dice di andare a vedere se l'id del record origine 
della form è presente nella tabella di blocco...se si non la fa aprire, 
se no, la apre e carica l'id nella tabella dei blocchi
alla chiusura, cancella l'id dalla tabella blocchi
 
mi pare ininfluente il fatto dei controlli associati o non
 
 
BFS
 


Magari mi sfugge qualcosa: pensavo cercasse qualcosa d'alternativo al "blocco ottimistico" nel caso più utenti scrivano lo stesso record (quindi, con oggetti bound gestiti da Access).
 
Saluti


la sua idea, ed è usata da vari software è questa
immagina maschera anagrafica che poggia su tabella anagrafica con 
controlli associati
 
 
ha una tabella blocchi con campi id/tabella/pc
 
 
quando tizio da pc1 apre la maschera anagrafica con id 757, inserisce in 
tabella blocchi la riga
 
757/anagrafica/pc1
 
 
quando caio da pc2 apre la maschera anagrafica con id 757, viene 
verificato se la tabella blocchi contiene l'id 757
se si: non fa aprire la maschera e presumo faccia apparire un "cliente 
bloccato da pc1 "
 
se no: apre la maschera e inserisce lui il blocco
se caio apre invece l'anagrafica con id 1000 nella tabella blocchi mi 
troverò
 
757/anagrafica/pc1
1000/anagrafica/pc2
 
 
quando tizio chiude la machera anagrafica, si cancella la riga con id 
757 dalla tabella blocchi
 
nulla vieta di usare le classiche form associate..c'è solo da aggiungere 
un paio di righe di codice in apertura e in chiusura per scrivere e 
pulire la tabella blocchi
 
il ragionamento fila...salvo i fastidi di dover poter gestire i casi 
eccezionali di record farlocchi nella tabella blocchi
 
BFS
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 bloccato da pc1 " 
 
 
Alla faccia della concorrenza!
Ricordo software degli anni 80/90 che ricorrevano a tal strategia, ma credevo fosse morta e sepolta.
IMHO è inutilizzabile con multiutenze "vere".
 
Saluti