| 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
NotaAttenzione, 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. |