General |
6.21 Compattare l'mdb in uso. |
Federico Luciani |
(D) Come posso compattare l'mdb in uso quando senza usare il Sendkey? (R) Ho preparato questo script che se eseguito da un mdb, lo chiude, lo compatta e lo riapre. Prima di eseguire lo script e' consigliabile chiudere tutte le forms. Per eseguirlo basta usare, da access, la shell in questo modo: Dim strPath As String strPath = "wscript.exe " & "C:\Temp\Compact.vbs " & Chr$(34) & CurrentDb.Name & Chr$(34) Call Shell(strPath, vbNormalFocus)attenzione ad usare il giusto path per Compact.vbs Naturalmente per funzionare, nel pc deve essere presente Windows Script Host! Per windows 98 seconda edizione, non ci sono problemi, per gli altri os non saprei; magari controllate che sul pc ci sia wscript.exe, altrimenti e' possibile scaricarlo dal sito MS. Attenzione, lo script, cosi' come e', non funziona con gli mdb protetti da password; invece funziona benissimo se si usa la protezione a livello utente. Copiate il codice seguente in un file di testo e salvatelo come Compact.vbs '******************************************************************* 'start code '******************************************************************* 'Nome: Compact.vbs 'Descrizione: compatta e riapre l'mdb in uso 'Autore: Federico Luciani 'Creato: 10/11/2000 'Utilizzo: dall'mdb eseguire: ' Dim strPath As String ' strPath = "wscript.exe " & "C:\Temp\Compact.vbs " & Chr$(34) & CurrentDb.Name & Chr$(34) ' Call Shell(strPath, vbNormalFocus) ' '******************************************************************* 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 '******************************************************************* 'end code '******************************************************************* |