Skip Navigation LinksHome : Articoli : Utilizzare Microsoft Access con Visual Source Safe

Utilizzare Microsoft Access con Visual Source Safe

di Gionata Aladino Canova (VBJ n° 61)

L'introduzione di Visual Source Safe nello sviluppo con Microsoft Access porta ad una benefica rivoluzione nel modo di lavorare, sia dello sviluppatore solitario sia in un gruppo di programmatori.

Gli sviluppatori Microsoft si dividono essenzialmente in due grandi famiglie: chi sviluppa con Microsoft Access e chi sviluppa con Microsoft Visual Studio. I primi sono in un limbo per cui non sono considerati utenti (provate a chiedere, ad un utente esperto di Office, la differenza tra CurrentProject.Connection e CodeProject.Connection!) ma non sono neanche considerati sviluppatori a pieno titolo.

Quindi accade che soluzioni adatte ad entrambe le famiglie come Visual Source Safe, siano ben documentate per chi le utilizza con Visual Studio, ma lo siano pochissimo per chi le utilizza con Microsoft Access. Il problema è amplificato se si cerca documentazione in lingua italiana.

Nei precedenti numeri (VBJ 42-43-44) sono comparsi tre ottimi articoli su Visual Source Safe, che illustrano le caratteristiche dei software di Version Control System e danno un'ampia panoramica su Visual Source Safe. Riagganciandomi ad essi, tenterò di colmare le lacune che si trovano provando ad utilizzare questo strumento con Microsoft Access. Considereremo il caso tipico di un'azienda con più sviluppatori; quello che però diremo è valido in massima parte anche nel caso di un singolo sviluppatore.

L’installazione di Visual Source Safe

Visual Source Safe è uno strumento che richiede poche risorse di sistema. Si consideri il caso tipico di un server dove memorizzare le varie versioni dei programmi e dei client sui quali esse vengono sviluppate. L'installazione inizia dal server. Inserito il CD-ROM, si selezioni Installazione standard. Con pochi passi, la procedura di installazione sarà completata.

A questo punto si dovrà condividere manualmente una cartella che, di default, è quella in cui è stato installato Visual Source Safe. (Nota personale: poiché mi dà una certa orticaria condividere una cartella che sta dentro la cartella Programmi , ho preferito creare e condividere una cartella chiamata VSS sotto la root del disco del server.)

Perché tutto funzioni, chi deve utilizzare il sistema deve avere i diritti di scrittura sulla cartella. Le istruzioni per effettuare le impostazioni complete si trovano sull’articolo [1] in MSDN. Si avvii ora l'interfaccia di amministrazione di Visual Source Safe e si selezioni la cartella appena condivisa. Visual Source Safe provvederà a crearvi un nuovo database.

Per i client, l'installazione può essere fatta in due modi diversi: si può utilizzare il NETSETUP.EXE, presente nella cartella di installazione di Visual Source Safe, oppure si può utilizzare il CD-ROM e installare la parte client di Visual Source Safe. Se si opta per il NETSETUP.EXE, c'è un piccolo vantaggio: se sul server sono state applicate le patch a Visual Source Safe, l'installazione risulterà già aggiornata (al momento della stesura dell'articolo, la versione è la 6.0d).

A questo punto, sul client, si ha a disposizione l'interfaccia normale di Visual Source Safe. Access ha delle proprie estensioni (add-in) per utilizzare Visual Source Safe, che vanno installate separatamente. Se si ha Office XP Developer, inserendo il CD di Office XP Developer, si selezioni Strumenti per la produttività di Access (vedi Figura 1 ).


Figura 1
Chi usa Access 2003, come prerequisito, deve avere il SP1 installato, come si legge in [2]. Dalle prove che ho fatto, esistono poi due alternative. Se dispone anche di Access 2002 ed ha installato gli Strumenti per la produttività di Access, è a posto. Infatti, l'add-in funziona correttamente anche su Access 2003. Oppure può andare sul sito Microsoft [3] e scaricare l'Access 2003 Plug-in for Visual SourceSafe. Personalmente, non ho rilevato problemi di compatibilità, ma, se avete un ambiente misto, consiglio prima una ricerca su Google.

Una volta completata l'installazione, l'ambiente di Access si presenta come in Figura 2.


Figura 2
Le opzioni sono molto intuitive, a parte che alcune sono in italiano ed altre in inglese! Di seguito le traduzioni da sapere:

  • Check out = Estrai
  • Check in = Archivia
  • Undo Check out = Annulla Estrazione

Visual Source Safe come coltellino svizzero

Un sistema di versionamento può essere utile in vari contesti. Lo si può impiegare ovviamente per memorizzare diverse versioni dei programmi. Ad esempio, avendo creato un file Aggiorna.vbs che automatizza l'aggiornamento dei diversi client, se ne possono archiviare le diverse versioni in Visual Source Safe. Un sistema di versionamento è utile non solo per archiviare i soli sorgenti della procedura principale, ma anche per memorizzare gli oggetti più disparati, magari le diverse versioni della bmp che costituisce la schermata di avvio della procedura, oppure i manuali d'uso o i file di progetto. Ci sono aziende che utilizzano sistemi come Visual Source Safe per garantire la storicità dei documenti, richiesta da certificazioni come l'ISO9001.

Access e Visual Source Safe

Chi sviluppa con Access è abituato ad avere pochissimi file da gestire, talvolta anche uno solo, in quanto un singolo file  contiene struttura dati, dati, maschere, report, macro e codice. Avere un solo file che contiene tutto è un approccio che risolve molti problemi ma ne crea altri. Volendo salvare diverse versioni di una maschera, si è generalmente costretti a duplicare molte volte il database. Per esempio, se si sta sviluppando il programma Fatture, in assenza di Visual Source Safe, si potrebbero generare dei database chiamati fatture01.mdb, fatture02.mdb etc. Passando a Visual Source Safe, probabilmente quindi, il primo approccio sarebbe quello di utilizzarlo per salvare ogni versione del file .mdb/.adp modificata. Visual Source Safe insieme all'add-in per Access, fornisce invece un sistema molto più efficiente per memorizzare le diverse versioni prodotte, perché, entro certi limiti, consente il salvataggio e, quindi, il versionamento, di un singolo oggetto.

Il solo grande limite che si incontra è che Visual Source Safe salva in un solo blocco la struttura dei dati ed i dati stessi. Questa limitazione abbastanza forte è dovuta al fatto di preservare l’integrità della base dati. Se, infatti, si potessero avere diverse versioni di una singola tabella, sia come struttura che come dati, ad ogni "prelievo" di una versione, potrebbero verificarsi incongruenze praticamente impossibili da gestire. Si pensi, ad esempio, alla classica situazione Clienti-Ordini: nella versione 2 della tabella clienti, è stato aggiunto il cliente 5, insieme ad alcuni suoi ordini; nel momento in cui si ripristina la versione 1 della stessa tabella che non ha il cliente 5, nella tabella ordini si avrebbero dei record orfani! Attenzione quindi ad eventuali query di creazione tabella. Se le tabelle vengono create quando non è stato fatto il check-out di Data and Misc. Objects, esse verranno cancellate al successivo check-out.

Visual Source Safe salva in un solo blocco in formato binario, la struttura dati con le relative relazioni, i dati, le CommandBar e le impostazioni di avvio. In particolare:

  • Tabelle (dati e struttura dati)
  • Informazioni di connessione per i progetti di Access (.adp)
  • Tabelle (dati e struttura dati)
  • Informazioni di connessione per i progetti di Access (.adp)
  • Relazioni
  • Command Bar definite dall'utente
  • Proprietà del database e proprietà di avvio
  • Specifiche di importazione/esportazione
  • Riferimenti impostati in VBA
  • Nome del progetto in VBA
  • Argomenti di compilazione condizionale
  • Informazioni per la stringa di connessione
  • Collegamenti per le pagine di accesso ai dati

Quindi, ogni volta che si devono effettuare modifiche ad una di queste cose, è necessario fare il check-out di Data and Misc. Objects . Purtroppo vengono perse eventuali proprietà aggiunte manualmente alla collection CurrentProject.Properties. Mi ero fatto un’aggiunta al VBE la quale, ad ogni compilazione incrementava un numero di build memorizzato in CurrentProject.Properties("AppBuild"); però, ricreando da zero il database, la proprietà viene persa.

Visual Source Safe permette inoltre, di creare da zero un database. Questa possibilità risulta molto utile oltre che, ovviamente, per recuperare un database perduto, anche per risolvere tutti quei problemi che ogni tanto si presentano e che i più scafati risolvevano con un bel /decompile. Ricreando il database da zero la dimensione è la minima possibile e si ottiene un file che non è mai stato sporcato da crash di Access.

Il primo approccio

La prima volta che si lancia Visual Source Safe, se si ha un server, si dovrà fornire nome utente e password, ma soprattutto, la cartella che è stata condivisa sul server. Infatti, Visual Source Safe, se non installato con il NETSETUP.EXE sui client, propone quella creata localmente.

Si avvii Access e si crei un nuovo database in una cartella locale. Dal menu Strumenti/SourceSafe  si selezioni AddDatabase to SourceSafe... Se si vuole creare un progetto con più oggetti, nella schermata che si presenta, si crei una cartella, con il pulsante crea. Poi, assegnato un nome al database, si prema Ok. Nella Figura 3


Figura 3
si vede un progetto di esempio dell'applicazione Vendere che ha le seguenti caratteristiche:

  • La cartella $ è la radice di tutti i progetti
  • La cartella Vendere è la radice del progetto Vendere e contiene solo i sottoprogetti
  • La cartella Backup contiene le diverse versioni del file Backup.vbs, uno script che effettua il backup dei dati. Come si vede, la cartella non risulta in grigetto, poiché contiene dei file che possono essere estratti anche tramite l'interfaccia di Visual Source Safe.
  • La cartella Vendere App contiene il database applicazione Vendere.mdb, memorizzato tramite l'add-in di Access. Per evitare corruzioni, i file non sono manipolabili direttamente dall'interfaccia di Visual Source Safe, quindi la cartella risulta in grigetto.
  •  La cartella Vendere Dati contiene il database dati VendereDati.mdb, memorizzato tramite l'add-in di Access. Anche in questo caso, essa è manipolabile solo tramite l'apposito add-in.

Adesso, verrà chiesto quali sono gli oggetti da mettere sotto il controllo di Visual Source Safe. Ovviamente, nel caso di un  database appena creato, ci sarà solo la struttura dati e quindi, l'unica opzione selezionabile sarà Data and Misc. Objects. Se si fosse aggiunto a Visual Source Safe un database con diversi oggetti, si sarebbero potuti specificare gli oggetti da far tenere sotto controllo a Visual Source Safe. Il messaggio che si ottiene alla fine dell'operazione, se tutto è andato bene, è molto insistente e ricorre spesso, perché è importante. Ricorda che, per fare modifiche ai dati, quindi per aggiungere un record, ad esempio, si deve sempre prima fare un check-out di Data and Misc. Objects, poi modificare i dati ed infine rifare un check-in. Eventuali modifiche effettuate senza questa procedura, verranno sovrascritte la prima volta che si preleverà l'ultima versione o si effettuerà il check-out di Data and Misc. Objects.

Lavorare con Visual Source Safe

Un database sotto controllo di Visual Source Safe e in ambiente multiutente si presenta come in Figura 4.


Figura 4
Il significato delle icone è:

  • Il lucchetto della Maschera1 indica che essa è sotto il controllo di Visual Source Safe e che nessuno ci sta lavorando.
  • Il segno di spunta della Maschera2 indica che di essa è stato fatto il check-out dall'utente del database. Quindi, è possibile effettuare modifiche sulla maschera.
  • L'icona dell'omino della Maschera3 indica che qualcun altro ha fatto il check-out della maschera e, quindi, attualmente, non è possibile modificarla.
  • La Maschera4 non ha icone, ossia non è sotto il controllo di Visual Source Safe. Se il database andasse perso, non sarebbe possibile recuperarla.

Per modificare un oggetto, si deve effettuare prima il check-out, in italiano estrai. Eseguita l'operazione, si modifica l'oggetto, lo si salva e si effettua il check-in, in italiano archivia. Per annullare l'operazione di check-out senza modificare il numero di versione dell'oggetto, si utilizza l'opzione Annulla estrazione.

Tramite l'opzione Mostra cronologia, si ha accesso alle diverse versioni dell'oggetto.

Nell'uso standard di Visual Source Safe, se si è abilitata l'apposita opzione, è possibile effettuare un check-out multiplo di un oggetto. Lavorando in accoppiata con Access, questa opzione viene limitata ai soli moduli. Il motivo è semplice: se due persone modificano lo stesso sorgente, al momento dell'ultimo check-out, Visual Source Safe tenta il merge automatico dei sorgenti. Se non riesce, visualizza una finestra che permette di vedere le differenze tra file e di riconciliare i conflitti. Ma tutto questo, se l'oggetto modificato è una form, non è possibile e lo è ancor meno se si tratta di Data and Misc. Objects, che è un oggetto binario. In ambiente multiutente, si devono limitare i check-out allo stretto indispensabile, per non rischiare di bloccare inutilmente qualche altro sviluppatore.

Feature e problemi

  • Processo di autenticazione
    Accedendo ad un database di Visual Source Safe, viene richiesta l'autenticazione. Questo processo può essere evitato se si ha cura di chiamare gli utenti di Visual Source Safe con lo stesso nome che utilizzano per l'accesso in rete. Si presenta però il problema inverso, volendo accedere a Visual Source Safe come diverso utente (magari come Admin). La soluzione più veloce sperimentata, se si dispone dei tool di amministrazione, è stata di cambiare al volo il proprio nome su Visual Source Safe. Al prossimo tentativo di accesso, verrà richiesta l'autenticazione.
  • Marcatura del database con il nome utente
    L'add-in di Access, quando si crea un database da Visual Source Safe, lo marca con il nome dell'utente, per ragioni di coerenza. Se lo stesso database viene aperto da un altro utente, si ottiene il messaggio Another user (<nome utente>) has placed this database under source code control and is the only person who should work with it. Source code control features will be disabled. In conseguenza vengono disabilitati i tool di Visual Source Safe. Il problema si può presentare perché un altro utente, da un altro pc, apre il database, oppure perché con i tool di amministrazione è stato cambiato il nome dell'utente su Visual Source Safe. Le soluzioni praticabili sono di aprire il database con il nome utente giusto oppure cancellarlo e ricrearlo.
  • La cartella <nomedatabase>.scc
    Quando un database viene posto sotto il controllo di Visual Source Safe, nella cartella che lo contiene, viene creata una sottocartella che ha lo stesso nome del database ed estensione .scc. Visual Source Safe non conosce né deve conoscere come Access memorizzi i propri dati, perciò l’architettura prevede che l’add-in di Access esporti ed importi dei file che poi vengono memorizzati e gestiti da Visual Source Safe. In pratica, quando si crea un nuovo progetto tramite l’add-in, i vari oggetti di Access vengono esportati in altrettanti file; in una seconda fase, questi file vengono esportati su Visual Source Safe. Viceversa succede quando importiamo un qualche oggetto da Visual Source Safe. In passato, la cartella veniva creata all’inizio della sessione di lavoro e distrutta alla fine. Oggi, viene mantenuta per ragioni di prestazioni. Potete però cancellarla tranquillamente: verrà ricreata alla prima sessione. Ricordarsi di questa cosa potrebbe essere importante. Per essere sicuri di ripartire con un database pulito, è sufficiente cancellare il database stesso e la sua cartella .scc e, infine, ricrearlo con l’opzione Strumenti/SourceSafe/Create Database from SourceSafe Project.

Risolvere i problemi

Un problema molto strano (cercando su Google, c'è un tizio che ci ha perso 40 ore!) riguarda il ripristino di un database salvato su Visual Source Safe; se si ottiene un messaggio tipo Failed to import file '<nomefile>' into Microsoft Access, il problema potrebbe essere dovuto al formato predefinito di file di Access. Ossia, se il database inserito in Visual Source Safe è in formato Access 2002/2003 e il formato predefinito dell'Access che effettua il ripristino è il 2000 si verifica il problema. Passi per riprodurlo:

  • Creare un database in formato Access 2002/2003
  • Creare una maschera vuota
  • Aggiungere un pulsante di comando
  • Aggiungere il seguente codice sull'evento Click del pulsante:
Private Sub Comando0_Click()
   MsgBox "Access Build: " & Application.Build
End Sub
  • Salvare la maschera
  • Aggiungere il database a Visual Source Safe tramite Strumenti/SourceSafe/ AddDatabase to SourceSafe...
  • Andare in Strumenti/Opzioni/Avanzate ed impostare il Formato di file predefinito a Access 2000
  • Cancellare il database in locale e la cartella <nome database.scc>li> Tramite Strumenti/SourceSafe/Create Database from SourceSafe Project ricreare il database.

All'ultimo passo dovrebbe verificarsi il problema precedentemente esposto.

Può succedere inoltre, che un programmatore abbia vinto alla lotteria e parta la notte stessa per una vacanza in un posto romantico. E, che nella fretta della partenza, si sia scordato che aveva lasciato dei file bloccati, ossia, ne aveva fatto il check-out ma mai il check-in. La stessa cosa può avvenire se il programmatore perde il database sul quale stava lavorando, magari per un guasto dell’hard disk. In questi casi, si presenta il problema di sbloccare quei file. Provando a farlo manualmente, ci si accorge che l’operazione non è consentita da Visual Source Safe, che ci segnala This is an integration-only project; getting files is not allowed from the SourceSafe Explorer.. Solo l’utente che ha fatto il check-out di un oggetto può sbloccarlo. La soluzione consiste nell’intervenire su un file di configurazione che modifica questo comportamento.

Nella cartella che contiene il database di Visual Source Safe (di standard: C:\Programmi\Microsoft Visual Studio\VSS) si trova il file srcsafe.ini il quale, per ogni progetto creato dall’add-in di Access, contiene una sezione del tipo

[$/TestVSS]

Disable_UI = Yes

E’ sufficiente, con un editor di testo, cancellare temporaneamente la riga in questione affinché Visual Souce Safe riabiliti i comandi Check Out, Check In, Undo Check Out e Get Latest Version. Una volta annullato il checkout del file bloccato, è buona pratica ripristinare la riga, per evitare che qualche utente inesperto faccia danni lavorando direttamente dall’interfaccia di Visual Source Safe.

Come distribuire un database

Per distribuire un database, lo si deve togliere dal controllo del codice sorgente. Per farlo, è sufficiente compattare il database e rispondere affermativamente alla domanda di Access se togliere il database dal controllo del codice sorgente.

In produzione, di solito, si fa qualche passo in più.

  • Se il database dell’applicazione ha una tabella in cui viene memorizzata la versione, si effettua il check-out di Data and Misc. Objects, e si modifica la versione
  • Si effettua il check-in di tutti gli oggetti modificati
  • Si aggiunge un’etichetta che segnala qual è la versione effettivamente distribuita al cliente
  • Si copia il database in una cartella che non sia quella di lavoro (altrimenti, riprendendo a sviluppare, ci si troverebbe con il database non più sotto il controllo di Visual Source Safe)
  • Si compatta il database e lo si distribuisce.

 Ricordarsi di tutte queste procedure non è semplice.In ogni caso è consigliabile avere almeno una checklist dei passi da compiere sempre sott'occhio.

Lavorare a casa con un DB sotto VSS

Per lavorare staccandosi dal cordone ombelicale di Visual Source Safe, è sufficiente effettuare il check-out di tutti gli oggetti che si prevede di dover modificare (o, se nessun’altro deve sviluppare sulla stessa applicazione, direttamente di tutti gli oggetti), e copiare il solo file di database.  Al rientro, si copierà il file sul pc di sviluppo e, dopo aver aperto Access, si farà il check-in di tutto. Visual Source Safe provvederà al salvataggio degli oggetti modificati ed al rilascio di tutti gli altri.

Consiglio: prima di affidarsi completamente a questa procedura, è buona prassi collaudarla, per escludere qualsiasi imprevisto.

Rriferimenti alla (poca) documentazione disponibile

In rete, l'articolo più interessante che ho trovato è Source Code Control in Microsoft Access 2000, presente sul sito MSDN al link
 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnacc2k/html/srcctrl.asp.
Per il resto, la maggior parte di materiale relativo a Visual Source Safe non comprende l'interazione con Microsoft Access. Per sopravvivere in caso di problemi, resta soltanto l'ottimo Google nella sezione gruppi.

Conclusioni

Lavorare con Visual Source Safe, in definitiva, conviene se

  • Si sviluppano molti prodotti con Access. Avere un sicuro sistema di catalogazione con un backup centralizzato fa comodo
  • Si sviluppa un prodotto distribuito in molti esemplari. Avere accesso alle diverse versioni e poter "ramificare" lo sviluppo, è veramente utile
  • Si lavora in ambiente multiutente. Sopra i due utenti, un sistema di versionamento è praticamente indispensabile
  • Si lavora in due ma uno dei due è spesso dal cliente o, comunque, sviluppa fisicamente non nello stesso ambiente. Automatizzare la gestione dei conflitti, avere un merge dei sorgenti semiautomatico e comunque uno strumento che consente in breve tempo di riconciliare modifiche contemporanee allo stesso file, è quasi indispensabile

 Si può fare a meno di Visual Source Safe se i prodotti gestiti sono pochi e lo sviluppatore è unico. In questo caso, i vantaggi di non essere in alcuna maniera legati ad altri software che Microsoft Access e la maggiore rapidità di sviluppo, compensano gli svantaggi di non utilizzare un sistema di versionamento. Ma, in questo caso, è indispensabile prevedere una buona strategia di backup. Infatti, anche se Access è sempre più affidabile, molto raramente può capitare che un crash danneggi irrimediabilmente un database, rendendo irrecuperabile il lavoro.

Curiosità

Chi non ha iniziato a lavorare con Access, forse si è sempre chiesto come vengano memorizzati gli oggetti internamente. La documentazione è praticamente inesistente, si ha conoscenza solo che esistono delle tabelle di sistema che, di solito sono nascoste. Bene, è giunto il momento di dare uno sguardo alla cartella <nomefile.scc>, che viene creata ogni qualvolta si lavori con un database memorizzato in Visual Source Safe. Ogni file, come si vede nella tabella seguente, contiene uno o più oggetti di Access. Aprendo un file di una maschera, si trova una piacevole sorpresa, ossia una sintassi piuttosto simile a quella usata dal Visual Basic per le form. Chissà se vale la pena pensare di interagire direttamente su quei file... :-)


Estensioni dei file per i corrispondenti oggetti di Access memorizzati in VSS

Oggetto Campo di applicazione Estensione
Query .mdb .acq
Maschere .mdb .adp .acf
Report .mdb .adp .acr
Macro .mdb .adp .acs
Moduli .mdb .adp .acm
Dati ed oggetti vari .mdb .acb
Dati ed oggetti vari .adp .acp
Nome del file di database .mdb .adp .acn

Riferimenti

[1]INFO: Required Network Rights for the SourceSafe Directories
http://support.microsoft.com/default.aspx?scid=kb;EN-US;131022

[2] Description of the files and the service packs that you have to have so that you can use an Access database under Visual SourceSafe control in Access 2003
http://support.microsoft.com/?id=837136

[3]  Visual SourceSafe
http://msdn.microsoft.com/vstudio/previous/ssafe/ (seleziona "Access 2003 Plug-in for Visual SourceSafe")