Newsgroup: it.comp.appl.access
Titolo: Regalino: compattare l'mdb in uso.

Ho preparato questo script che se eseguito da un mdb, lo chiude, lo compatta e
lo riapre.
Non c'e' una gestione degli errori, anche perche' e' la prima volta che scrivo
uno script e onestamente non avevo voglia di studiare :-), ma credo che l'unica
cosa veramente importante sia chiudere tutte le sessioni di data entry, prima
di eseguirlo.
L'unico controllo che fa e' che gli venga passato come argomento un file .mdb.
Per eseguirlo basta usare, da access, la shell in questo modo:
  Dim strPath As String
  strPath = "wscript.exe " & "C:\Temp\Compact.vbs " & CurrentDb.Name
  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.
Dai miei test, sembra funzionare egregiamente, naturalmente vi chiedo di
testarlo e farmi sapere se ci sono malfunzionamenti.
In ogni caso vi chiedo di farmi sapere come va.
Appena e' definitivo lo metto sul sito comune.
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 " & CurrentDb.Name
'  Call Shell(strPath, vbNormalFocus)
'
'attenzione al path di Compact.vbs
'*******************************************************************
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 = "C:\" & strTmpFile
'si collega alla sessione access aperta
Set objMDB = WScript.GetObject(strMdbFile)
'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
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
'*******************************************************************
-- 
Federico
--------------------------------------
Sito Comune di it.comp.appl.access
http://members.xoom.it/it_db_access
mailto:
it_db_...@usa.net
--------------------------------------
Tutte le richieste che mi arrivano
in privato, vengono cestinate.
--------------------------------------
Rimuovi paperino. per email
fluc...@paperino.libero.it
--------------------------------------

 [cut]
Non posso crederci, nessuno ha provato questo script?
-- 
Federico
--------------------------------------
Sito Comune di it.comp.appl.access
http://members.xoom.it/it_db_access
mailto:
it_db_...@usa.net
--------------------------------------
Tutte le richieste che mi arrivano
in privato, vengono cestinate.
--------------------------------------
Rimuovi paperino. per e-mail
--------------------------------------

 --------------------------------------
Per quanto mi riguarda utilizzavo già script VB proprio per eseguire
"automatismi" tipo importazione file txt, aggiornamento tabelle, compatta
mdb, download file e tutte quelle operazioni che possono essere delegate ad
uno schedule;  è questo il motivo del mio silenzio...
Ciao.

 Ciao.
per me e' la prima volta che scrivo qualcosa in vbscript.
ho scaricato il debugger, ma fa abbastanza schifo.
per quanto riguarda lo script in oggetto, visto che quella della compattazione
dell'fe e' una delle richieste piu' frequenti, mi aspettavo qualcosa di piu'...
tutto qui ;-)
-- 
Federico
--------------------------------------
Sito Comune di it.comp.appl.access
http://members.xoom.it/it_db_access
mailto:
it_db_...@usa.net
--------------------------------------
Tutte le richieste che mi arrivano
in privato, vengono cestinate.
--------------------------------------
Rimuovi paperino. per e-mail
--------------------------------------

 --------------------------------------
A dire la veritą mi aspettavo anch'io un bel po' di messaggi...
Ciao.

 --------------------------------------
Ciao Federico, sono ARIANNA!!
Io l'ho provato e funziona benissimo W98, Access97!
Ciao By Arianna!


#####
Ciao,
funziona benissimo, l'ho appena provato.
Io personalmente fino ad ora mi richiamavo un nuovo file col quale mi
compattavo il precedente cosě:
    DBEngine.CompactDatabase "c:\nomevecchio.mdb", "c:\nomenuovo.mdb"
    Kill "c:\nomevecchio.mdb"
    Name "c:\nomenuovo.mdb" As "c:\nomevecchio.mdb"
    DoCmd.Quit
e poi mi riaprivo l'applicazione.
Un po' troppi giri pero'.
Una domanda:
Ma perche' questo comando non funziona?
DoCmd.DoMenuItem acFormBar, 6, 6, 1
dovrebbe andare a prendere il sottomenu compatta database, ma č come se non
esistesse e quindi il menu 6 degli strumenti č la sicurezza.
ciao Riccardo

 Non posso crederci, nessuno ha provato questo script?
Funziona, Luciano, funziona...
scusa ma ero troppo preso dal lavoro, e nei piccoli ritagli stavo valutando
di perfezionare lo pseudo compilatore che ti ho mandato.
L'hai provato?
Ciao
--
Silvio
il sito comune di it.comp.appl.access:
http://members.xoom.it/it_db_access


Dimenticavo...
secondo me potresti già metterlo nel Sito Comune (x chi non sapesse di cosa
parlo, vedere l'url sottostante).


 ciao Riccardo
non saprei, mi spiace, ma non ho mai usato DoCmd.DoMenuItem, cosi' come se
posso evito l'uso di sendkey con le voci di menu.



__________________
Ciao Federico,
ho provato lo script e funziona...pero' se l'mdb ha un nome incluso di spazi
( es. Prova Pippo) mi da errore dicendo che il file non č mdb!!
come si puo' risolvere?
ciao Riccardo

 > Funziona, Luciano, funziona...
Opss! Pardon!
Come avrai capito, sono particolarmente fuso in questi giorni...
volevo dire: Funziona, Federico, funziona...


 L'hai provato?
Non ancora, mi spiace, lo faro' questo fine settimana, promesso ;-)


 come si puo' risolvere?
non ci avevo pensato!
questo succede perche' lo script considera lo spazio come separatore degli
argomenti che gli vengono passati.
provo a vedere come si puo risolvere.
Grazie


 Federico e non Luciano :-)
Hai ragione! Ma me ne sono accorto anche prima di te ed ho già postato le
necessarie scuse, che, comunque, ripropongo...
Ciao





 Antonio
1°) sei pregato di rispondere dopo il quoting, cioè dopo i messaggi
precedenti, grazie.
2°) il codice è presente nel messaggio di Federico Luciani che ha generato
questo thread.


 ciao Riccardo
-- 
Federico
--------------------------------------
Sito Comune di it.comp.appl.access
http://members.xoom.it/it_db_access


 ciao Riccardo
risolto,
ti basta racchiuderlo tra doppi apici, cioe'
Dim strPath As String
strPath = "wscript.exe " & "C:\Compact.vbs " & Chr$(34) &
CurrentDb.Name & Chr$(34)
Call Shell(strPath, vbNormalFocus)
per gli mdb protetti, sto modificando lo script.
appena pronto lo posto.



________
Questo pero' bisogna deciderlo prima...e se poi un utente cambia il nome del
file?
E' possibile inserire un controllo sul nome del database in modo da
utilizzare in automatico l'una o l'altra possibilitą (senza o con spazi)?
ciao Riccardo

 utilizzare in automatico l'una o l'altra possibilità (senza o con spazi)?
Se richiami lo script in questo modo, non ha importanza come sia il nome del
file. Funziona sempre.
strPath = "wscript.exe " & "C:\Compact.vbs " & Chr$(34) & CurrentDb.Name &
Chr$(34)
-- 
Federico
--------------------------------------
Sito Comune di it.comp.appl.access
http://members.xoom.it/it_db_access
mailto:
it_db_...@usa.net
