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 SubNota 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 backendva usata solo con Access 97. |