Newsgroup: it.comp.appl.access
Titolo: compattare via codice

Non riesco a compattare via codice il database corrente.
 
Riesco a compattarlo facendolo direttamente dal menu' (strumenti / 
utilita' database /compatta database), ma io vorrei farlo tramite un 
semplice bottone in una maschera.
 
Se creo il bottone e gli faccio fare
 
  DoCmd.RunCommand acCmdCompactDatabase
 
invece di compattare il database aperto, mi chiede di copiarlo su una 
copia e mi chiede il nome sul disco.
 
come mai?
 
 
 
 
 
-- 
la cricca dei giacobini (C) M.G.

Salve,
 
Giacobino Da Tradate ha scritto:

Sembra che parli di una versione di Access <=2003. In questo caso vedi:
http://www.donkarl.com/it?FAQ6.6
 
 
-- 
Ciao
Karl
*********
http://www.AccessDevCon.com
 
Access FAQ: 
http://www.donkarl.com/it
 
 
 
 

Perché non puoi compattare, che significa chiudere e riaprire l'applicativo, mentre stai cercando di eseguire una macro.
 
Il pulsante che usi chiaramente delega un codice esterno che non vedi...
 
Ti suggerirei di delegare questa azione ad un tool esterno, anche un Applicazione con access ma separata, alla quale deleghi la compattazione in sicurezza, ovvero solo dopo aver fatto un BackUp del file ecc...
 
@Alex

 ...
 
Ah, con un vantaggio di 5 minuti ho vinto il premio enorme per la prima 
risposta dell'anno. :-)
 
Buon Anno, Alex!


 
Grazie Karl anche a te, e signora, buon nuovo anno.
 
@Alex

 In questo caso vedi: 
http://www.donkarl.com/it?FAQ6.6
 
 
Sendkeys "%(SUC)" a me andrebbe bene
 
ma mi dice "errore di runtime 70 - autorizzazione negata" come se quando 
parte il codce mi bloccasse il database.


Giacobino da Tradate used his keyboard to write :

Prova questa:
===========================
Private Sub CompactCurrentDB_Click()
 
CommandBars("Menu Bar"). _
Controls("Tools"). _
Controls("Database utilities"). _
Controls("Compact and Repair Database..."). _
accDoDefaultAction
 
End Sub
===========================
 
Bruno

 
 
lo sviluppatore che mise in piedi la procedura diversi anni fa risolse 
impostando la compattazione automatica alla chiusura del database (è nelle 
opzioni)
 
-- 
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [ al lavoro ] ...........

 del file ecc...
 
Si puo' fare, ma dovrei aggiungere un secondo programma esterno, mentre 
preferirei lasciare il programma stand-alone. E' una utility popolare 
fra svariati reparti, che controlla ogni minuto una certa situazione e 
rigenera un report, praticamente e' sempre acceso 24h/24, a furia di 
cancellare e rigenerare il database raggiunge il limite e si blocca. Ho 
insegnato agli operai a compattarlo a mano, ma esteticamente preferirei 
farlo in automatico.


Mah nelle cose che dici fatico a capire... ci sono considerazioni fattibili solo conoscendo bene la situazione.
Di certo servirebbe capire se il sistema è Monoutente o Multiutente, se diviso i FE e BE, se è in rete e lo apri in FileSharing...
 
Generare report non può accrescere le dimensioni del DB...
 
In ogni caso non è una procedura sicura quella che hai descritto, se si corrompe il database resti a piedi... ma se per te è sufficiente... anche per noi va bene.
 
@Alex

 parte il codce mi bloccasse il database.
 
Ricevi l'errore anche con il codice "giusto" nell'articolo che chiama la 
voce di menù?


 Generare report non può accrescere le dimensioni del DB...
 
Il report no, ma si appoggia a una tabella locale che viene rigenerata 
periodicamente.


 voce di menù?
 
Non ho capito :-(


>> quando parte il codce mi bloccasse il database.
 
Se usi un Windows >=Vista succede se la UAC, cioè sicurezza, blocca 
Sendkeys. Puoi provare un'alternativa come questa di Dev: 
http://access.mvps.org/access/api/api0046.htm
 
 
Dopo che hai copiato e salvato tutto il codice del sito in un nuovo 
modulo standard prova:
 
mySendkeys "%(SUC)"


 ...
 
Ah, solo adesso vedo che anche lui usa Sendkeys nel codice. Però ci sono 
altre alternative come p.e. quella tedesca:
 
https://www.vbarchiv.net/tipps/tipp_542-alternative-zur-sendkeys-anweisung.html
 
 
Devi copiare/salvare tutto il codice del sito prima della parola e 
sezione "Beispiel" (esempio) in un modulo standard e dopo prova:
 
SendKeysEx "%(SUC)"


 mySendkeys "%(SUC)"
 
Sembra bello ma c'e' l'inghippo.
 
prima quel codice testa per capire se e' sotto W95 o WNT (codice vintage 
anche lui?), poi dichiara la nuova funzione, solo che in realta' usa 
ancora il SendKeys originale, al che giustamente a me si ferma tanto 
quanto.
 
=============================================
Sub mySendKeys(sKeys As String, Optional bWait As Boolean = False)
Dim bNumLockState As Boolean
Dim bCapsLockState As Boolean
Dim bScrollLockState As Boolean
     bNumLockState = IsNumLockOn()
     bCapsLockState = IsCapsLockOn()
     bScrollLockState = IsScrollLockOn()
 
     SendKeys sKeys, bWait
----^^^^^^^^^^^^^^^^^^^^^
 
     If IsNumLockOn() <> bNumLockState Then
         ToggleNumLock
     End If
     If IsCapsLockOn() <> bCapsLockState Then
         ToggleCapsLock
     End If
     If IsScrollLockOn() <> bScrollLockState Then
         ToggleScrollLock
     End If
End Sub
=================================================
 
Aggiornamento
 
ho provato su un vecchio XP e SendKeys di per se' funziona (senza 
wait!), premo il bottone, lancia la compattazione e la completa. Ma al 
termine, invece di ripassare la visualizzazione alla maschera di 
partenza, si ferma alla visualizzazione "oggetti del database".
 
Per adesso quindi conviene ancora far fare a mano Alt-S -U -C, col che 
torna alla maschera.


 
https://www.vbarchiv.net/tipps/tipp_542-alternative-zur-sendkeys-anweisung.html
 
 
tipo "ENUM" non riconosciuto in A97!
