Newsgroup: it.comp.lang.visual-basic
Titolo: Access 95

ho sviluppato un applicazione VB4-32 Access95, il cui obiettivo e' di
fornire la conoscenza per eseguire dei calcoli, quindi e' un'applicazione
che sostanzialmente interroga il DB, anche se vengono memorizzati i
risultati intermedi che sono poi cancellati (tabella da 30 byte per 300
righe circa).
il file mdb occupa circa 500 kB, ho notato che dopo poche interrogazioni il
volume del file mdb cresce a dismisura 50-80 Mb, sono costretto quindi a
compattare il db ad ogni uscita. non mi sembra il massimo dell'eleganza.
chi ha avuto lo stesso problema?? idee ???
--
Enrico
enr...@spin.it

chi ha avuto lo stesso problema?? idee ???
in proporzioni minori ma l'ho avuto anche io.  l'ingrossamento del
file dipende dal fatto che tutte le volte che importi qualcosa, access
alloca lo spazio per tale importazione, poi quando cancelli l'oggetto
access non disalloca lo spazio, ma semplicemente rimuove il
riferimento all'oggetto.
credo ci siano solo queste possibilità: 
- o implementare una sorta di compattazione automatica del file (ma è
rognosetto e non si può fare al volo: puoi compattare solo un file
chiuso, quindi bisogna usare un espediente che poi ti dico), 
- oppure, meglio, invece che *importare* le tabelle che devi
elaborare, le *alleghi* e le disalleghi, 
- o anche, le importi su un db esterno, su questo db esterno svolgi le
operazioni "ingrassanti" (ma in questo caso ingrassanti per il db
esterno), e poi compatti dal db di lavoro il db esterno.
come ti dicevo, compattare un db aperto non è possibile.  quello che
io faccio (nel mio caso specifico questa compattazione è solo una
feature gradita ma non prevista) è questo: uso un db per caricare il
nome di un altro db da aprire.  quindi, in effetti ho diversi db di
lavoro e un "lanciatore" di db.
dal lanciatore di db posso fare diverse operazioni sui db di lavoro,
tra cui la compattazione, a comando ell'utente o più o meno
automatizzata a certe scadenze in modo che l'utente se non vuole non
se ne debba preoccupare.
mooolto più di rado ho bisogno di compattare il lanciatore, ma a volte
ne ho comunque bisogno. l'utente potrebbe compattare il lanciatore da
uno qualsiasi dei db di lavoro, ma per vari motivi non voglio che ciò
avvenga.
allora c'è una tabella nel lanciatore che dice quando è avvenuta
l'ultima compattazione e per quale dimensione del file lanciatore sia
opportuno ricompattare.  la compattazione prende tempo per cui non la
voglio fare sempre, poi è sempre una cosa rischiosetta, metti che
manca la corrente ecc. (microsoft dice che non succede niente, ma la
prudenza non è mai troppa).
in sostanza, poniamo che il lanciatore sia tipicamente di 5-600k, gli
dico di compattarlo ogni 30 giorni oppure se la sua dimensione eccede
il Mb (le info relative a data di salvataggio e dimensioni del file si
trovano con le funzioni filedatetime filelen).  tutte le volte che un
qualsiasi db di lavoro viene lanciato, controlla la dimensione del
lanciatore e i dati nella tabella del lanciatore che dicono quanto
deve essere grosso, e se è il caso lo compatta in modo trasparente
all'utente (ci mette pochi secondi in più rispetto al normale avvio
del db di lavoro che comunque ci mette un po' a partire).
----------------
rimuovere .NOSPAM dall'indirizzo email per rispondere privatamente
remove .NOSPAM from email address to answer me privately
========================================================
WARNING: Payment is required for use of the above Email
address for unsolicited commercial Email or as part of a
mailing list for any purpose. 
As for US Federal and/or Italian Laws, by sending commercial
E-mail you agree to pay US$500.00 for storage fees.
========================================================
"By US Code Title 47, Sec.227(a)(2)(B), a computer/modem/printer meets
the definition of a telephone fax machine.  By Sec.227(b)(1)(C), it is
unlawful to send any unsolicited advertisement to such equipment.  By
Sec.227(b)(3)(C), a violation of the aforementioned Section is
punishable by action to recover actual monetary loss, or $500, whichever
is greater, for each violation."

compattare il db ad ogni uscita. non mi sembra il massimo dell'eleganza.
Puoi provare a passare a VB5. Microsoft sostiene che JET 3.5 ha
ridotto i casi di "database bloating".
Altrimenti puoi provare ad allegare una tabella dBase per i dati
temporanei e farne lo ZAP dopo averla usata. Non so se sia possibile
da JET, ma altrimenti puoi scrivere anche solo un piccolo programma
Clipper da lanciare in automatico.
Ciao
--------------------------------------------------------------------
Fulvio Senore
Eliminate "NOSP" dall'indirizzo e-mail per scrivermi (spammers...)
Remove "NOSP" from e-mail address to write me (spammers...)
--------------------------------------------------------------------