Una famiglia di sistemi di gestione per database relazionali di Microsoft progettati per semplificare l'uso.
_______________________________________________________________________ _____ COMPATTAZIONE DI UN DB NON DIVISO
Nel caso in cui si voglia utilizzare un db non diviso (in BE e FE), è consigliabile evitare che esso venga utilizzato contemporaneamente da più utenti al fine di evitare eventuali danneggiamenti.
Un esempio di danneggiamento è proprio dovuto alla compattazione. In particolare, se il db viene compattato alla chiusura da un utente, mentre un altro utente lo sta utilizzando, viene creato un altro db.
Alla prima chiusura viene creato Database.mdb, alle seconda Database1.mdb, alla terza Database2.mdb, e così via (viene creato un .mdb anche se il file da compattare è un .accdb).
Un metodo per fare in modo che il db venga utiilizzato al massimo da un utente, è il seguente:
[1] Inserire all’inizio della macro AutoExec il seguente codice:
If (NumeroUtenti > 1) Then
Application.Quit
End If
[2] Inserire in un modulo standard la seguente funzione:
Public Function NumeroUtenti() As Integer
Dim cn As Object, rs As Object
Dim Nrutenti As Integer
Set cn = CurrentProject.Connection
Set rs = cn.OpenSchema(-1, , "{947bb102-5d43-11d1-bdbf-00c04fb92675}")
While Not rs.EOF
If rs.Fields("CONNECTED") = True Then
Nrutenti = Nrutenti + 1
End If
rs.MoveNext
Wend
Set rs = Nothing
Set cn = Nothing
NumeroUtenti = Nrutenti
End Function
Per quanto riguarda la compattazione, penso che essa comporti (anche se in minima parte)
un rischio di danneggiamento del db, pertanto penso che sia ragionevole:
* effettuare la compattazione periodicamente (per esempio una volta al mese)
* fare un backup del db prima della compattazione
Quindi il metodo da me descritto nel post precedente potrebbe andar bene, però modificherei
l’opzione di compattazione, scrivendola in inglese anziché italiano, per quanto spiegato da Cinzia
in Application.SetOption in italiano o inglese.
Riporto qui sotto la procedura corretta:
[3] Creare il campo DataCompattazione:
Creare il campo DataCompattazione di tipo Data in una tabella (es.: TABELLA2)
Inserire manualmente in questo campo la data della prima compattazione.
[4] Inserire nella macro AutoExec il seguente codice:
Application.SetOption "Auto Compact", False
In modo tale che di norma non si abbia la compattazione automatica alla chiusura del db.
[5] Inserire nel Sub di chiusura del db il seguente codice:
Dim DataComp As Date, FuturaComp As Date
DataComp = data ricavata dal campo DataCompattazione della TABELLA2
If (Date >= DataComp) Then
Application.SetOption "Auto Compact", True ‘Si abilita la compattazione
y = 3 'Giorno del mese in cui si vuole compattare
FuturaComp = DateAdd("m", 1, Date - Day(Date) + y)
Inserire FuturaComp nel campo DataCompattazione della TABELLA2
End If