Backup (semi)automatico dei DB Frontend e Backend

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"]

No thoughts on “Backup (semi)automatico dei DB Frontend e Backend”