CISA FotoGallery

Statistiche

Tot. visite contenuti : 914036
Home Articoli tecnici HowTo Condividere in una rete LAN un'applicazione

Condividere in una rete LAN un'applicazione

 E' sicuramente possibile condividere un'applicazione Access in rete.
Access ha in sè la duplice natura di raccoglitore di dati, grazie alle tabelle, e di strumenti per gli utenti. Questa duplice natura viene esaltata dalla possibilità di dividere la nostra originaria applicazione in un BackEnd (BE), dove lasciare tutte le tabelle e le relazioni tra queste ed il FrontEnd (FE), cioè tutti gli altri oggetti con i quali l'utente interagirà.
Il FE in Access può tranquillamente poggiarsi a database diversi da Access, con SQL Server, Oracle, Mysql e tanti altri, attraverso ODBC su DNS o DNSless.
Per la nostra trattazione conveniamo che parliamo di un BE in Access stesso.

Chiariamo prima alcune cose.
Un file Access ha il limite di 1Gb per le versioni fino a A97, e di 2 GB per quelle successive. Possiamo però avere diversi Backend ognuno di 2 GB e quindi non avremo immensi problemi di storage di dati anche usando solo Access.

E' chiaro però che volumi così importanti andranno ad affaticare il buon JET, che è il motore del database, colui che porge i dati ai client. Access non è una tecnologia Client-Server ma ne è una in file-sharing e quindi il motore può fare molta fatica se i volumi sono importanti.
Per scolpire la differenza tra un db client-server come SQL Server ed uno in file sharing si immagini di avere una tabella di 100.000 record e dal client voler interrogarla per tirar su 10 record.
Dal client parte la richiesta, il db SQL Server la riceve, elabora la select in locale attraverso le viste (qualcosa di equiparabile alle query di Access) la richiesta, e rispedisce al client solo i 10 record; la stessa richiesta inviata ad un mdb invece viene soddisfatta dal db affidando tutti e 100.000 record a JET, il quale diligentemente porta tutti i record al client e quest'ultimo in locale elabora la select.
Va da sè che tutto questo si traduce in un enorme traffico in più, in maggiore lentezza.
Già da A97 esistono le QueryPassTrought, cioè query che risiedono sul FE come le viste e che per questo sono molto veloci, ma hanno l'inconveniente che sono query di sola lettura (quindi creerebbero problemi se le volessimo usare come origine dati di una maschera e sarebbe impossibile se le volessimo usare in una maschera di inserimento).

Questo significa che Access è lento in rete?
Ovviamente dipende. Dipende dalla buona strutturazione delle tabelle, dalla sua buona indicizzazione, dalla capacità dello sviluppatore di evitare le ridondanze e comunque dalla capacità di strutturare per bene il db.
Posso dire che, avendo visto mdb anche importanti come volume, Access fa egregiamente il suo lavoro.

Quali sono gli altri elementi che concorrono nella valutazione dell'efficacia di un mdb come BE?
Sicuramente il numero di accessi contemporanei.
Anche qui è un problema di come strutturare il tutto, ma la tranquillità mostrata prima può ricevere cittadinanza anche in questa risposta.

Bene, ma materialmente come faccio a lavorare in rete?
Quali sono i passaggi da fare?


Premessa
Partiamo col dire che una qualsiasi postazione può essere chiamata per comodità della nostra trattazione "Server" ed è quella su cui risiedono i dati.
Ricordiamo però che qualsiasi cartella su Win XP home edition accetta fino a 5 connessioni contemporanee e su Win XP Pro fino a 10. Se abbiamo più di 10 connessioni dobbiamo usare Sistemi Operativi Server.

Divisione del db
Attraverso la procedura automatica possiamo dividere il db in due entità.
Access dalla nostra applicazione di esempio "Gestione pagamenti arbitri.mdb" (per questione di privacy non diciamo il nome commitente a strisce) ci crea un file che chiamerà "Gestione Pagamenti arbitri_be.mdb" in cui ci mette tutte le tabelle e le relazioni ed un altro lasciato com'era ma che porta invece delle tabelle fisiche, dei collegamenti alle tabelle.
Verificare il percorso a cui si riferiscono le tabelle:
-STRUMENTI
-UTILITA' DI DATABASE
-GESTIONE TABELLE COLLEGATE
(diciture e posizione cambiano in base alla versione, ma fanno la stessa cosa).
Accanto alle tabelle collegate il FE potrebbe avere anche delle tabelle locali, che posso essere utilizzate solo da quel client per particolari bisogni.

Se invece vogliamo dividere manualmente il db, magari discriminando le tabelle da collegare, possiamo usare
-FILE
-CARICA DAGLI ESTERNI
-COLLEGA TABELLE
chiaramente rispettando la divisione tra le due identità.

Son due metodi equivalenti.

Come rendo disponibile il BackEnd?
Il FE può essere collegato con il percorso relativo e cioè:
"NomeComputerDiverso\Path\NomeDb.mdb".
Oppure io mappo come risorsa di rete la cartella condivisa che ospita il db e mi riferisco a questa
Da una cartella qualsiasi
-STRUMENTI
-CONNETTI UNITA' DI RETE
-Scelgo una lettera come drive (mi conviene usare lettere alte così posso settare la stessa per tutti i pc e non rischiare di dover fare il conto delle periferiche dei pc)
-Inserisco il nome del pc o l'indirizzo IP e poi il path della cartella

Cosa resta da fare?
Semplicemente copiare il FE sul client, e riallegare le tabelle.
In entrambi i casi di prima, il riallegamento è davvero semplice
-STRUMENTI
-UTILITA' DI DATABASE
-GESTIONE TABELLE COLLEGATE
-selezioniamo le tabelle che vogliamo
-indichiamo il path della risorsa che interessa

Un messaggio ci confermerà l'avvenuta operazione.