Newsgroup: it.comp.reti.locali
Titolo: Condivisione di un database su una rete locale

Scusate se forse sono OT
Ho sviluppato un'applicazione in Delphi per la gestione di una
biblioteca personale.
L'applicazione mi permette di gestire
- Libri (con la possibilità di inserimento dell'indice generale, e di
uno o più autori)
- Riviste (con possibilità di inserimento degli articoli, e
l'inserimento di uno o più autori)
- Per ogni articolo, la possibilità di inserimento delle parole chiavi
- Materiale Audiovisivo (Video, Musica, ecc)
Ora l'applicazione è cresciuta, e mi hanno chiesto di installarlo su
più computer interconnessi.
Premetto che il database che ho usato è stato Access 97.
Il problema che sorge a questo punto è il seguente: come fare se più
utenti si collegano
al database per inserire un nuovo record nella stessa tabella ?
Quando il programma funzionava su un solo computer, avevo creato un
sistema di
creazione di un numero progressivo univoco per ogni nuovo record
inserito, che aveva
anche lo scopo di essere una chiave primaria per la tabella in esame.
Ora, se due o più utenti si connettono al database e cercano di
inserire
nuovi record nella stessa tabella (ad esempio, un nuovo libro), viene
creato lo stesso
valore numerico. Questo, ovviamente, non è consentito, in quanto si
creerebbero
valori duplicati per la chiave primaria.
Ho cercato informazioni in giro, ma non ho trovato molto.
Qual'è l'approccio corretto ? Non riesco a bloccare la tabella con
l'istruzione
DmLibri.RegistroLibri.Locktable(...)
prima di aggiornare la tabella RegistroLibri (che contiene i
progressivi generati)
e l'istruzione
DmLibri.RegistroLibri.Unlocktable(...)
per sbloccare la tabella RegistroLibri
ma questa soluzione non funziona
Qualcuno potrebbe aiutarmi, magari anche con esempio di codice già
sviluppato, oppure
con link a qualche sito.
Gianni

Questo è un problema per it.comp.appl.access!
Se vai a questo NG troverai il problema già posto e già risolto (vedi
messaggi da fine febbraio a oggi).
Comunque in due parole il primo punto è che Access è un programma client,
cioè che access si avvia nel computer che l'ha chiamato. Per mettere in
comune i dati li metti in una cartella accessibile ai computer quindi anche
a Access. In questo modo ogni istanza di access (unica su ogni computer ma
molte sulla rete!) andrà a vedere solo quei dati.
Adesso il problema delle modifiche/aggiunte dati alle tabelle condivise
viene gestito automaticamente da access che ha come politica preimpostata
quella pessimista, cioè che nessuno può modificare o aggiungere (nel caso di
num ID che si ripeterebbero) senza che il primo utenti abbia finito, cioè
salvato le sue modifiche.
Volendo (devi leggerti un buon manuale per decidere, a livello di codice, le
politiche di condivisione), c'è anche la politica ottimista, che fa sì che è
l'ultimo utente a salvare le modifiche della stessa cella o record a essere
effettivamente salvate senza che gli altri lo sappiano, anche se erano "lì"
allo stesso momento.
Comunque senza cambiare niente al tuo codice in genere è preferibile la
soluzione pessimista che è più prudente e più trasparente, ma più lenta
perché obbliga gli altri ad aspettare che il primo abbia finito!
Un pò come fare la fila in bagno!!!
Ciao, e fammi sapere.