Newsgroup: it.comp.appl.access
Titolo: compattare database ad ogni chiusura???

Ciao a tutti......
volevo chiedere se e come si può far si che si compatti e ripristini il DB
ad ogni chiusura??? e inoltre,una curiosità:facendo il DB ho provato molti
comandi o routine d'evento che poi in realtà non utilizzo,rimangono comunque
nel DB anche se non servono??? se si come posso richiamare tutto quello che
non serve ed eliminarlo???
Ciao e Grazie!!!


Per compattare un database ho trovato questo nell'help:
Osservazioni
È necessario che il file di origine non sia il database corrente oppure un
file aperto da un altro utente, in quanto richiamando questo metodo il file
viene aperto in modalità esclusiva.
Esempio
Nell'esempio riportato di seguito viene compattato e ripristinato un
database, viene creato un file registro se il file di origine è danneggiato
e viene restituito un valore Boolean se il ripristino è stato eseguito in
modo corretto. Perché questo esempio possa funzionare, è necessario passare
i percorsi e i nomi di file del file di origine e di destinazione.
Function RepairDatabase(strSource As String, _
        strDestination As String) As Boolean
        ' Input values: the paths and file names of
        ' the source and destination files.
    ' Trap for errors.
    On Error GoTo error_handler
    ' Compact and repair the database. Use the return value of
    ' the CompactRepair method to determine if the file was
    ' successfully compacted.
    RepairDatabase = _
        Application.CompactRepair( _
        LogFile:=True, _
        SourceFile:=strSource, _
        DestinationFile:=strDestination)
    ' Reset the error trap and exit the function.
    On Error GoTo 0
    Exit Function
' Return False if an error occurs.
error_handler:
    RepairDatabase = False
End Function

 ha scritto nel messaggio
news:nG%e9.72668$ub2.1...@news1.tin.it...

Se usi Access Xp dalle opzioni scegli Generale e poi spunta Compatta alla
chiusura.
Per pulire il codice dalle routine inutilizzate fai così:
apri il modulo della maschera interessata...posizionati nella sezione
dichiarazioni (dove trovi Option Compare Database) fai click sulla casella a
discesa ("(dichiarazioni)") in alto a destra. Se qui oltre a sub e funzioni
trovi qualcosa tipo Comando_51Click, puoi cancellarlo senza problemi. Ci
clicchi e cancelli la routine che ti verrà mostrata. Per rivedere l'elenco
devi riposizionarti nella sezione dichiarazioni.
In pratica l'elenco mostra tutto quello che puoi cancellare, che non ha
riferimenti nei controlli della maschera. Attento a non cancellare eventuali
sub o function da te inserite.
Ciao,Carlo

 ad ogni chiusura???
Questa soluzione funziona con A97 e con l'esecutore di vbscript installato
sul PC.
Fai una maschera di avvio e chiusura, in modo che l'utente debba passare da
lì per chiudere l'applicativo.
Su pulsante chiudi esegui questo codice:
path = Left(CurrentDb.Name, InStr(CurrentDb.Name, "Nome
TuoApplicativo.mdb") - 1)
    path = """" & path & """"
    strPath = "wscript.exe " & path & "Compact_chiudi.vbs " & Chr$(34) &
CurrentDb.Name & Chr$(34)
    Call Shell(strPath, vbNormalFocus)
Compact_chiudi.vbs è un vbscript che deve stare nella stessa directory del
tuo applicativo con scritto dentro questo
Set objArgs = WScript.Arguments
Call Init()
Dim objMDB
Dim objFSO
Dim strMdbFile
Dim strTmpFile
'nome e path dell'mdb passato come argomento allo script
strMdbFile = objArgs(0)
Set objFSO = CreateObject("Scripting.FileSystemObject")
'genera un nome file temporaneo
strTmpFile = objFSO.GetTempName
strTmpFile = Left(strMdbFile, InstrRev(strMdbFile, "\")) & strTmpFile
'si collega alla sessione access aperta
Set objMDB = WScript.GetObject(strMdbFile)
'minimizza la finestra di access
objMDB.RunCommand 11
'chiude l'mdb in uso
objMDB.CloseCurrentDatabase
'compatta l'mdb in un file temporaneo
objMDB.Dbengine.CompactDatabase strMdbFile, strTmpFile
'Msgbox strMdbFile & " -> " & strTmpFile
'elimina l'mdb originale
objFSO.DeleteFile(strMdbFile)
'copia il file tempraneo nel'mdb originale
objFSO.CopyFile strTmpFile, strMdbFile
'elimina il file temporaneo
objFSO.DeleteFile(strTmpFile)
'riapre l'mdb compattato
'objMDB.OpenCurrentDatabase strMdbFile
'maximizza la finestra di access
objMDB.RunCommand 10
Set objFSO = nothing
Set objMDB = nothing
'*******************************************************************
'Controlla che il parametro sia un file mdb
'*******************************************************************
Sub Init()
 'controlla che l'argomento sia un mdb
  If objArgs.Count  < 1 Then WScript.Quit
  If Right(objArgs(0),4) <> ".mdb" Then
    Msgbox "Il file selezionato non e' un mdb.",  16, "Errore!"
    WScript.Quit
  End If
End Sub
'*******************************************************************
Antonio