General

6.29 Compattare tutti i BackEnd di un FrontEnd e farne una copia di backup
  Federico Luciani, Riccardo Pozzi

La seguente sub se lanciata da un FrontEnd permette di compattare tutti i BackEnd che contengono tabelle a lui collegate quindi di ogni BackEnd fa una copia di backup.
Sub CompattaBE()
   'Autore: Riccardo Pozzi e Federico Luciani
On Error GoTo gestErr
   Dim backend As String
   Dim strSQL As String
   Dim rs As DAO.Recordset
   Dim risp As Integer
   Dim copia As String
   Dim msg As String
   strSQL = "SELECT Trim([Database]) AS DB " & _
            "FROM MSysObjects " & _
            "GROUP BY Trim([Database]), MSysObjects.Type " & _
            "HAVING (((MSysObjects.Type)=6));"
   Set rs = CurrentDb.OpenRecordset(strSQL)
   If rs.EOF And rs.BOF Then GoTo esci
   risp = MsgBox("Procedere con salvataggio e compattazione?",  _
      vbQuestion + vbYesNo)
   If risp <> vbYes Then Exit Sub
   DoCmd.Hourglass True
   DoCmd.SetWarnings False
   rs.MoveFirst
   msg = ""
   Do
       backend = rs![DB]
       msg = backend & vbCrLf & msg
       '*****************************
       ' La riga di codice che segue va usata solo con Access 97
       DBEngine.RepairDatabase backend
       '*****************************
       DBEngine.CompactDatabase backend, backend & ".new"
       copia = Dir(backend & ".bak")
       If copia <> "" Then Kill backend & ".bak"
       Name backend As backend & ".bak"
       Name backend & ".new" As backend
       rs.MoveNext
   Loop Until rs.EOF
   MsgBox "Compattazione terminata per i seguenti DB:" & _
      vbCrLf & msg, vbExclamation
esci:
   rs.Close
   DoCmd.SetWarnings True
   DoCmd.Hourglass False
   Exit Sub
gestErr:
   MsgBox Err.Number & " - " & Err.Description
   GoTo esci
End Sub
Nota
Attenzione, prima di lanciare la procedura, chiudere tutte le maschere legate.
La sub di cui sopra fa riferimento alla libreria Microsoft DAO quindi, se si usa una versione di Access successiva as Access 97 è necessario aggiungere al database i riferimenti a Microsoft DAO 3.6 Object Library.
La seguente riga di codice VBA:
DBEngine.RepairDatabase backend
va usata solo con Access 97.


Se pensate di avere del materiale freeware interessante e volete pubblicarlo, allora leggete qui.