Carissimi, oggi vi presento un esempio utile per effettuare il backup di un ipotetico sistema composto da due diversi DB collegati: il DB che contiene le sole tabelle (che chiameremo, impropriamente, BackEnd) , che per ragioni legate alla condivisione dei dati è stata collocata su un File Server e il Frontend, distribuito ai colleghi che dovranno utilizzarlo.
In verità questa automazione è utile al solo sviluppatore: In fase di sviluppo, magari le tabelle sono collocate sullo stesso PC in cui si lavora alla programmazione. Ma perché ci dobbiamo preoccupare di fare backup?
La ragione sta nel fatto che quando si lavora al codice, per esempio sulle maschere, ci si dimentica che il codice VBA è estremamente delicato e va trattato “con le pinze” ovvero dobbiamo cercare di mantenerlo sempre in perfetto ordine.
Cosa voglio dire? Facciamo un esempio: Abbiamo creato una maschera con certi automatismi, pulsanti ed eventi. Per qualche motivo abbiamo bisogno di una maschera o un report molto simile. Cosa c’è di più comodo di un “copia & incolla”?
Difatti procediamo ed eliminiamo le parti inutili magari aggiungendo altre parti per adeguare la nuova form o il nuovo report alla bisogna.
MA
Ci dimentichiamo che quando si copia un oggetto, Access (giustamente!) si porta dietro l’intera automazione della pagina, le query sottostanti e quant’altro. Qui arriva la fase delicata: A volte questa condizione genera incongruenze e il DB si CORROMPE. Altre condizioni simili si verificano quando, ad esempio, tentiamo di eliminare form complesse.
Dunque quando ci accingiamo a fare operazioni di questo genere dovremmo fare SEMPRE prima un backup, meglio anche del Backend (il DB tabelle collegate). Inoltre, prima di compattare e ripristinare il DB, operazione consigliatissima, è sempre MEGLIO effettuare un controllo sul codice.
Dunque: 1) prima di tutto un bel backup; 2) Poi controlliamo il codice (dopo vi dico come si fa); 3) altro backup; 4) compatta e ripristina DB; 5) lavoriamo al nuovo codice/progetto.
Il codice viene controllato entrando il Visual Basic e, nel menu “Debug” scegliamo “Compila”. Questa operazione verifica che tutti i riferimenti utilizzati esistano e che il codice sia intelligibile al compilatore VBA, evitando possibili incongruenze che potrebbero mandare in crash il sistema.
Veniamo all’automazione: la trascrivo qui sotto:
Sub EseguiBackup() 'Dimensioniamo le variabili utilizzate Dim Source As String, MyDir As String, MyBKPPath As String Dim Target As String, Folder As String Dim retval As Integer Dim strReturn As String Dim Prefisso As String Dim Tabella As String, BackEnd As String '-----------PERSONALIZZAZIONE------------------------ ' Prefisso contiene il prefisso da dare al file di backup del frontend Prefisso = "prefisso_frontend_" ' BackEnd contiene il prefisso da dare al file di backup del backend BackEnd = "Prefissobackend_tabelle_" ' Tabella contiene il nome di una qualsiasi tabella contenuta nel file di backend Tabella = "Comuni" '----------------FINE PERSONALIZZAZIONE--------------- 'MyDir è la cartella in cui si trova il DB corrente MyDir = CurrentProject.Path ' MyBKPPath è il percorso completo della sottocartella per i backup MyBKPPath = MyDir & "\Backup" 'la cartella MyBKPPath esiste? Folder = Dir(MyBKPPath, vbDirectory) ' se non esiste, creala If Folder = vbNullString Then VBA.FileSystem.MkDir (MyBKPPath) '----prepariamoci ai backup---- 'prepara il file sorgente ' qui prepariamo il filo origine (il frontend) Source = CurrentDb.Name 'prepara il nome e la destinazione Target = MyBKPPath & "\" & Prefisso & "_" Target = Target & Format(Date, "dd-mm-yy") & "-" Target = Target & Format(Time, "hh.mm") & ".accdb" ' crea il backup del frontend retval = 0 Dim objFSO As Object Set objFSO = CreateObject("Scripting.FileSystemObject") retval = objFSO.CopyFile(Source, Target, True) Set objFSO = Nothing ' questa parte puoi eliminarla se non hai un backend ' Creiamo la procedura per il backup del backend (il dB con le tabelle, qui il file è in formato .mdb) On Error Resume Next ' se non trova la tabella continua oltre strReturn = CurrentDb.TableDefs(Tabella).Connect ' controlla se la tabella esiste e mette il percorso in strReturn 'eliminiamo le informazioni inutili dalla stringa 'per preservare solo il percorso assoluto lung = Len(strReturn) strReturn = Right$(strReturn, lung - 10) ' crea backup del backend Source = strReturn 'prepara il nome e la destinazione Target = MyBKPPath & "\" & BackEnd Target = Target & Format(Date, "dd-mm-yy") & "-" Target = Target & Format(Time, "hh.mm") & ".mdb" retval = 0 Set objFSO = CreateObject("Scripting.FileSystemObject") retval = objFSO.CopyFile(Source, Target, True) Set objFSO = Nothing ' ----fine della parte eliminabile per il backend----- MsgBox "OK, backup eseguito in " & MyBKPPath, vbOKOnly End Sub
E’ tutto ben commentato, dunque dovete effettuare esclusivamente la personalizzazione delle variabili e il gioco è fatto.
Spero, al solito, d’esservi stato utile!
[mx_youtuber type="video" id="NKQhzokGQbQ"]