Newsgroup: it.comp.lang.visual-basic
Titolo: Ancora sulla programmazione in rete

Ciao a tutti.
In seguito alle risposte ricevute ad un mio messaggio postato su
questo newsgroup ai primi di ottobre, ho iniziato ad affrontare il
problema che mi assillava scegliendo di utilizzare una tabella ad hoc
nella quale registrare il valore del campo contatore del record che un
utente sta modificando.
Quando un altro utente seleziona il pulsante Modifica, per prima cosa
controllo in questa tabella se il record non sia in corso di modifica
da parte di un altro utente: in caso negativo registro il valore del
contatore nella tabella e inizio la modifica del record; in caso
positivo avviso l'utente, il quale puo' riprovare la modifica oppure
annullarla.
Dopo aver fatto l'Update, elimino dalla tabella il contatore, rendendo
disponibile il record per le modifiche da parte di altri utenti.
Voi cosa ne pensate? Sono sulla strada giusta?
Altro problemino: quando un utente modifica la base dati inserendo,
modificando o eliminando un record, e' meglio fare il refresh sulle
altre stazioni a cadenza fissa (con un timer settato a 10 secondi, per
esempio), oppure mettere un pulsante tramite il quale l'utente puo'
effettuarlo manualmente?
Io avevo pensato di mettere un timer sulla form e ogni tot secondi
controllare in una tabella appositamente predisposta (con un solo
campo nel quale scrivere il nome della tabella da aggiornare) se si
deve fare il refresh: in caso affermativo svuoto la griglia contenente
tutti i record della tabella e poi la riempio nuovamente.
Ci sono controindicazioni?
Scusate la lunghezza del messaggio, ma per me e' una questione molto
importante dato che il programma che sto realizzando e' abbastanza
delicato.
Grazie a tutti in anticipo.
Nando
       _  _______________________________  _     
      / )|                               |( \    
     / / |      FERDINANDO CECCHINI      | \ \   
   _( (_ |    
fdn.ce...@flashnet.it
   | _) )_ 
  (((\ \>|_/->_______________________<-\_|</ /)))
  (\\\\ \_/ /                         \ \_/ ////)
   \       /                           \       / 
    \    _/                             \_    /  
    /   /                                 \   \  
   /___/                                   \___\ 


Questo metodo ha un punto debole: se il server va in crash mentre un
record è bloccato nessuno lo sbloccherà più...
Credo che ci siano altri due modi di affrontare il problema:
- usare un blocco ottimistico: l'utente può sempre modificare il
record, se per caso qualcun altro glielo ha modificato sotto il naso
parte un errore di runtime. E' tutto gratis, ci pensa JET.
Questo metodo va bene se le probabilità che due utenti modifichino
contemporaneamente gli stessi dati sono basse, ovvero se gli utenti
hanno una qualche idea di cosa stanno facendo...
- in alternativa puoi evitare di memorizzare i blocchi in una tabella.
Considera un file qualunque, di lunghezza 0 byte. Anche se può
sembrare strano è possibile bloccare, ad esempio, il byte numero 2318
di quel file anche se il byte non esiste. A questo punti se tu sei in
grado di associare un numero diverso ad ogni record di una tabella (ad
esempio con un campo contatore) puoi tentare di bloccare il byte con
numero uguale a quello del record. Se ci riesci via libera, altrimenti
lo ha già fatto qualcun altro e devi aspettare.
Concettualmente è analogo al tuo metodo, ma se il server muore i
blocchi muoiono con lui e non hai problemi.
Le istruzioni Basic sono Lock e Unlock.
Ciao
--------------------------------------------------------------------
Fulvio Senore
Eliminate "zz" dall'indirizzo e-mail per scrivermi (spammers...)
Remove "zz" from e-mail address to write me (spammers...)
--------------------------------------------------------------------