COLLEGAMENTO DINAMICO DI TABELLE DA SORGENTI DIVERSE Partiamo dai seguenti presupposti: 1) Il database sia costituito da due file separati, uno dei quali contenente le tabelle. Per brevità (anche se impropriamente) chiameremo: “Dati” il file che contiene solo le tabelle. “Applicazione” il file che contiene solo gli elementi dell’applicazione database escluse le tabelle, ossia le query, i report, le maschere ecc. In questo file le tabelle saranno presenti come “tabelle allegate”. “Progetto” l’intero insieme di “Applicazione” + “Dati”. 2) Abbiamo bisogno di un metodo che ci consenta di allegare le tabelle qualora il file contenente le tabelle venga spostato di posizione. E’ utile tipicamente se i dati risiedono su un pc di una rete e l’applicazione su un altro. Note importanti: Supponiamo di considerare la condivisione dei dati all’interno di una rete. Il file di dati verrà riposto in una directory di un pc che chiameremo server. Supponiamo che questo pc (il server) non venga usato per far girare l’applicazione ma venga usato solo per condividere i dati. L’applicazione verrà installata solo su tutti gli altri pc che chiameremo client. Diamo per esempio alla directory sul server il nome “SORGENTE”. Per poter accedere a questa directory dai client dovremo condividerla dal server e collegarla sui client. A questo punto questa directory verrà vista dai client come un disco di rete ! (ad es. l’unità X: ) Il path per raggiungere il file dati sarà quindi per tutti i client X:\ Un primo problema che vogliamo risolvere è quello di non voler rimanere vincolati a dover collegare la directory del server proprio e solo con la lettera X. (così saremo liberi di collegare sui vari client la directory del server tramite una qualsiasi lettera) Un secondo problema nasce quando oltre a poter lavorare da uno dei client vogliamo poter far lavorare l’applicazione anche direttamente sul server. (non solo questo ci garantisce un pc in più da poter utilizzare, ma è anche il caso tipico di quando si programma. Infatti, generalmente, quando si deve sviluppare l’applicazione è comodo poter lavorare indipendentemente su un pc a parte e non in rete. Questo sia per poter lavorare in un’altra sede, ma anche per non rischiare di compromettere i dati reali, lavorando invece su una copia di essi su un pc a parte.) In questo particolare caso il path per raggiungere il file dati non è più X:. Non solo cambia la lettera (tipicamente C: in quanto stiamo lavorando in locale) ma bisogna aggiungere anche il nome della directory condivisa (ossia in questo esempio il path diventa C:\SORGENTE\). In questo esepio illustro solamente il modo di collegare dinamicamente le tabelle potendo cambiare il path ma supponendo che sia costituito solamente da una unità disco di rete. Se si vuole poter modificare il path aggiungendo anche un percorso fatto di subdirecory bisogna solamente prevedere che l’utente possa inserire anche il nome delle subdirectory, oppure se si prevede il nome delle subdirectory sia prefissato, dare la possibilità di una spunta tramite la quale l’utente possa scegliere se l’applicazione sta lavorando su un client o sul server. In base a questa spunta nel programma verrà o meno aggiunto il nome prefissato della directory dopo quello del disco. METODO: Bisogna innanzitutto creare nell’applicazione una maschera con una casella dove l’utente possa scrivere il nome del disco di rete attraverso il quale si è collegata la directory condivisa dal server che contiene il file dei dati. In questa maschera verrà anche creato un bottone per eseguire il collegamento delle tabelle una volta inserita la lettera dell’unità disco di rete. Il codice seguente dovrà essere eseguito in corrispondenza dell’evento “su click” di quel bottone. Chiamiamo simbolicamente: tabella_esempio la tabella che vogliamo allegare database_esempio il file di dati che contiene la tabella (salvato sul server) maschera_esempio la maschera che verrà usata per eseguire la procedura di collegamento delle tabelle controllo_esempio la casella in cui viene fatta scrivere la lettera dell’unità disco di rete Note per il codice: (Disco_dati_corrente , Database_corrente sono delle variabili, io gli ho dato questi nomi, ma sono arbitrari) (Alle parole scritte in corsivo bisogna sostituire i nomi reali del proprio progetto) (Le righe che iniziano con l’apostrofo, in conformità con la sintassi di Access, sono dei commenti.) (Nel seguente testo, tra una riga di codice e l’altra ho laciato sempre una riga vuota. Se tra due righe non ce n’è una vuota, significa che in realtà si tratta di un’ unica riga andata a capo. In access sarà da scrivere tutta di seguito.) Il codice da scrivere è il seguente: ‘la seguente istruzione assegna alla variabile Disco_dati_corrente la lettera che l’utente ha inserito nella casella di nome controllo_esempio nella maschera di nome maschera_esempio. Si presume che si richieda all’utente di inserire solo la lettera del disco (ad es. X) e non la lettera più il carattere “due punti” (ad es. X: ). Se si preferisce far inserire all’utente l’unità disco nella forma X: bisogna togliere dal mio esempio l’ultima parte della riga e cioè & ”:” Disco_dati_corrente = Forms![maschera_esempio]![controllo_esempio] & ":" ‘la seguente istruzione assegna alla variabile Database_corrente il nome del file di database che contiene le tabelle completo di path. Attenzione: il carattere \ (backslash) davanti a database_esempio è stato messo volutamente e va laciato. A database_esempio va sostituito il nome del file che contiene i dati, cioè le tabelle da allegare. Se per esempio il nostro file di dati si chiamasse Archivio.mdb la riga reale sarebbe: Database_corrente = Disco_dati_corrente & “\Archivio.mdb” Database_corrente = Disco_dati_corrente & "\database_esempio" ‘la seguente istruzione va ripetuta per ogni tabella che si vuole allegare DoCmd.DeleteObject A_TABLE, "tabella_esempio" ‘la seguente istruzione va ripetuta per ogni tabella che si vuole allegare DoCmd.TransferDatabase A_ATTACH, "Microsoft Access", Database_corrente, A_TABLE, “tabella_esempio", "tabella_esempio"