Ciao Alex, ho eseguito un po' di prove e devo dire che il tuo suggerimento è stato veramente risolutivo.
@Alex ha scritto:
Le nuove versioni non lo consentono se non ricordo male... tant'è che nella Versione 2010 non trovo la proprietà SystemDB, indispensabile...
Puoi usare un Membro Nascosto che è un Priate Engine, usato solo per azioni come queste... oppure istanzi un DbEngine standard...
Vado MOLTO a spanne, perchè sono codici vecchi di Oltre 10 anni che non posso testare... ma il senso è questo:
Private loDBEngine As DAO.PrivDBEngine
Private loWs As DAO.Workspace
...
Set loDBEngine = New PrivDBEngine
loDBEngine.SystemDB = "C:\Percorso\File.MDW"
loWs = loDBEngine.CreateWorkspace("#default#", strUserName, strPass)
loDBEngine.CompactDatabase(SrcName As String, DstName As String, [DstLocale], [Options], [SrcLocale])
Credo possa andare solo fino ad A2003.
Sebbene io stia usando Access 2010, il membro nascosto "PrivDBEngine" funziona a meraviglia, anche senza specificare il "SystemDB". Però, ho dovuto modificare la routine per farla funzionare. Guardando un po' in rete, ho scritto il seguente codice:
Function CompattaDBconSicurezzaLivUtente()
Dim PrvDbe As PrivDBEngine
Dim strDBOrigine as String, strDBComp as String
strDBOrigine = "C:\Percorso\DBdaCompattare.mdb"
strDBComp= "C:\Percorso\DBCompattato.mdb"
Set PrvDbe = New PrivDBEngine
With PrvDbe
.SystemDB = "C:\Percorso\File.MDW" ' Facoltativo, io non l'ho specificato
.DefaultUser = "admin"
.DefaultPassword = ""
.CompactDatabase strDBOrigine, strDBComp
End With
Set PrvDbe = Nothing
End Function
Naturalmente, questa routine può essere implementata inserendo l'effettuazione di una copia di Back-up del file da compattare, da ripristinare in caso si verifichino errori, e la gestione dei file da cancellare, una volta compattato il Database.
@Alex ha scritto:
Non sottovaluterei anche questa semplicissima Opzione di SCRIPT:
Anche tramite l'utility "Jetcomp" il Database viene compattato ed il tutto è gestibile da codice VBA.
Alla fine, tra le due possibilità, ho scelto la prima soluzione. Ho modificato la routine di compattazione, che si trova in un altro Database di servizio e che compatta il Database principale quando necessario, sostituendo al "JRO.JetEngine" il "PrivDBEngine".
Grazie mille ancora.