Newsgroup: it.comp.appl.access
Titolo: Compattare il BE

Ciao a tutti,
ho un db che ho diviso in FE e BE. Come faccio a compattare il BE con un
bottone dal FE.
Ho visto che sul sito comune c'e' un codice ma non sono riuscito a farlo
funzionare.
Ovviamente prima di compattare deve verificare se qualcuno sta accedendo al
BE con un'altro FE.
Mi potreste aiutare?
Grazie
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

Alternativa:
crea un file vbs e scrivici dentro quanto segue:
'*******************************************************************
'start code
'*******************************************************************
'Nome:        Compact.vbs
'Descrizione: compatta e riapre l'mdb in uso
'Autore:      strano...mavero
'Creato:      Dicembre 2004
'Utilizzo:    dall'mdb eseguire:
'   Dim strPath As String
'   strPath = "wscript.exe " & "C:\... path ...\Compact.vbs " & Chr$(34) &
CurrentDb.Name & Chr$(34)
'   Call Shell(strPath, vbNormalFocus)
'
'Se presenti AntiVirus ricordarsi di autorizzare l'esecuzione dello script
'
'*******************************************************************
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 "ATTENZIONE!!! Il file selezionato non e' un mdb.",  16,
"Errore!"
    WScript.Quit
  End If
End Sub
'*******************************************************************
'end code
'*******************************************************************
poi associ ad esempio all'evento click di un tuo pulsante:
Dim strPath As String
  strPath = "wscript.exe " & "C:\infostore\dati\Compact.vbs " & Chr$(34) &
CurrentDb.Name & Chr$(34)
  Call Shell(strPath, vbNormalFocus)
Questa procedura ti compatta l'mdb anche se è aperto.
Saluti,
--
strano...mavero

 Grazie
La tua 2° osservazione è molto IMPORTANTE ed è la prima cosa
da tenere in considerazione.
Se lavori in MultiUtenza dovrai predisporre tutto un sistema
di LOGOUT forzato dei FE altrimenti non verrà compattato.
A questo punto devi decidere tu come muoverti, per fare una
forzatura alla chiusura dei FE l'unico metodo è creare una
Maschera Hide(nascosta) che su evento Timer 5000ms controlli 
un FLAG in una tabella nel BE e se a TRUE Docmd.QUIT.
Questo Flag ovviamente lo dovrai Settare a TRUE tu con una
QueryAction da un Applicativo di Manutenzione oppure dal
FE ma la devi discriminare il LOGOUT per macchina e non forzare
quello del FE dal quale lanci il comando.
A questo punto da una Form NON ASSOCIATA, quindi con tutti
i Recordet chiusi, lanci la compattazione
con il Metodo DAO CompactDatabase, quindi ripristini
il FLAG.
ALternativa a questo metodo un pò di dettaglio è schedulare
l'esecuzione di un file VBS(ad esempio quello postato da
Strano ma vero) e mandarlo in esecuzione a mezzanotte.
Io personalmente uso il 1° metodo.
Ciao
@Alex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG