Newsgroup: it.comp.appl.access
Titolo: Super compattare

Secondo me, il metodo migliore per compattere "pesantemente" un file Access
è quello di importare tutti gli oggetti in un nuovo mdb.
Questo snellisce di molto il file mdb (e il suo mde) in confronto alla
compattazione "tradizionale" ed evita i "rischi" dell'uso del /decompile.
Su un mio lavoro ho avuto questi risultati:
  File.mdb originale compattato = circa 15 Mb
  File.mde = circa 6 Mb
 dopo l'importazione:
  File.mdb compattato = 4,5 Mb
  File.mde = 3,5 Mb
Naturalmente sto parlando del FE di una applicazione (senza dati).
Il database inoltre è risultato "visibilmente" più veloce.
E' necessario però:
- importare tutti gli oggetti in un nuovo mdb
- ripristinare tutti i riferimenti
- reimpostare il "Nome Progetto" nelle proprietà del progetto
- reimpostare le opzioni di avvio (Titolo applicazione, Icona etc etc)
Non esiste in rete una appliazione che fa in automatico tutte queste
operazioni?
Sul sito comune c'è un'applicazione di RoDAgo che dovrebbe fare qualcosa di
simile (non esattamente quello che intendo io) ma non sono riuscito a farla
funzionare con Access 2000.
Grazie
Ciao
Silvio

 ha scritto nel messaggio
news:butm9k$lmf40$1...@ID-171909.news.uni-berlin.de...

Beh, il progetto di RodAGO invece fà esattamente quello che hai detto
solo che tu lo fai a mano e ti appoggi a funzioni native, lui si è dovuto
macellare non poco per far fare tutto al codice......!
Per farlo funzionare con A2K e superiori devi impostare i riferimenti
alle librerie DAO e togliere ADO.
Se non ricordo male però c'è un'anomalia su un metodo relativo al
CompactDatabase
nelle versioni A2K, ma dovrebbe essere aggirabile.....!
@Alex.

 nelle versioni A2K, ma dovrebbe essere aggirabile.....!
Grazie per aver risposto.
Mah, dal progetto di RodAGO leggo:
  1) Terminato il lavoro sul modulo di codice VBA, selezionare tutto e
  Copiare negli Appunti.
  2) Tornare in modalità Design di maschera o Report e impostare a NO la
  proprietà "Possiede Modulo".
  3) Confermare la rimozione del modulo VBA e salvare.
  4) Rientrare nel modulo di codice (che sarà vuoto) e Incollare il codice
  precedentemente Copiato nel ClipBoard.
  5) Salvare, uscire e compattare il .MDB.
questo NON è esattamente quello che dicevo io (è qualcosa di più
sofisticato). Comunque, mi pare di capire che il risultato finale sia lo
stesso: compattazione estrema e pulizia da elementi inutili (e pesanti).
Rimane il fatto che su Access 2000 non riesco proprio a farlo funzionare
(nonostante DAO installato etc). Qualcuno ha qualche idea???
Grazie
Ciao
Silvio

 ha scritto nel messaggio
news:bv3j2f$n4utt$1...@ID-171909.news.uni-berlin.de...

Le istruzioni sono complete, ma se studi il Modulo VBA.....!
Come fai tu in realtà importi oggetti già "Corrotti", come fa RodAGO
elimini anche quello, non solo concettualmente è quello che ti prefiggevi
ma è più corretto, che sia più complesso...... beh è solo codice ben
applicato..!
La cosa nasce dalla valutazione del file MDB non come File di Database
ma come File Testo o HEX.....!
Ciao.
@Alex.


Grazie. Rimane il problema di farlo girare su Access 2000. Ho provato tutte
le soluzioni che mi venivano in mente ma niente da fare. Il file si compila
correttamente (quindi le librerie sono a posto) ma la procedura si blocca
sempre al momento di aprire un oggetto (che esiste) dandolo per inesistente.
Non so più cosa provare.
Grazie
Ciao
Silvio


Ho notato questo di anomalo:
1)Se hai Moduli di Classe, questi non vengono sempre riconosciuti
e di conseguenza mi fallisce il DeleteObject....!
2)Non funziona il CompactDatabase chiamato da Runcommand...!
Non ho avuto tempo per approfondire la questione, ora occorre vedere
dove genera errori nella creazione dei Moduli e se per poter essere
riconosciuti
i Moduli di Classe non abbiano necessità di essere modificati come Attributi
non visibili come questi:
Attribute VB_Name = "clsBrowserDialog"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
che vedi solo esportandoli in Txt......!
Se riesco faccio ulteriori prove poi ti aggiorno.
@Alex.

 ha scritto nel messaggio
news:bv90rh$bqs$1...@lacerta.tiscalinet.it...

Altro problema non da poco ma forse risolvibile, poichè
il programma genera un Nuovo DB che chiama in modo provvisorio
nel quale copia tutto il contenuto del progetto originale ed istanzia
un oggetto Database nuovo questo non ha di DEFAULT i riferimenti
DAO, che vanno sicuramente settati......!
A quel punto riesce ad utilizzare tutta la Collection legata all'Oggetto
Database
altrimenti ovvio che non può.
Per settare i riferimenti a questo punto deve essere la prima cosa da fare
dopo aver istanziato il Nuovo Oggetto Database(2K o XP).
Se no ricordo male si usa l'Insieme References ed il suo metodo
addfromfile in questo modo:
 References.AddFromFile(strNomeFile) ne trovi un esempio nell'Help.
Il File GUIDA di DAO è questo come Riferimento
"{00025E01-0000-0000-C000-000000000046}"
Se riesci a proseguire fammi sapere.....!
@Alex.
@Alex.

 "{00025E01-0000-0000-C000-000000000046}"
Ciao @Alex e grazie.
Sono convinto che il problema maggiore sia la mancanza dei riferimenti DAO
del nuovo file temporaneo. Proverò a capire come risolvere la cosa. Il
problema però, è che bazzico in un campo a me sconosciuto: non ho mai
lavorato su un db che non sia quello in uso (e, inoltre, ho poco tempo!!!).
Senz'altro tenterò di fare qualcosa.
Grazie
Ciao
Silvio

 Silvio
Che problema trovi nel lavorare in un Oggetto(Db Remoto) che
espone tutte le proprietà ed i Metodi di CurrentDb....?
Devi solo cambiare il Riferimento, supponi di usare invece di CurrentDb:
Dim dbCurr as DAO.Database
 set dbCurr=currentdb()
Invece di Currentdb hai l'oggetto DB aperto con OpenDatabase(NomeDB......).
Per il tempo purtroppo è tiranno per tutti.
Ciao buon lavoro.
 @Alex.


OTTIMO!!! ci proverò.
Ciao
Grazie
Silvio