Newsgroup: it.comp.lang.visual-basic
Titolo: database access

Qualcuno sa se in VB6 la compattazione del database che si fa con 
CompactDatabase su un file mdb è la stessa operata da Access  ?
 
Il file dopo la compattazione risulta chiaramente più leggero, ma come 
viene alleggerito cosa viene eliminato?
 
 
-- 
Gulp®
--
"Partimque figuras retulit antiquas, partim nova monstra creavit."
(La Metamorfosi - Ovidio)

 Il file dopo la compattazione risulta chiaramente più leggero, ma come viene alleggerito cosa viene eliminato?
 
Credo che i campi vengano ridotti alla effettiva dimensione utilizzata: in un campo txt di 50 caratteri che contiene 
"Milano" dopo la compattazione sarà un campo che occupa lo spazio necessario a memorizzare 6 caratteri invece di 50
 
-- 
Greg

 alleggerito cosa viene eliminato?
 
i record marcati come "cancellato".
 
In pratica un database e' come un libro che ad ogni nuovo record viene
aggiunta una pagina, per velocità (poi dipende anche dal motore del
database) quando cancelli/elimini/modifichi** un record anzichè 
spostare
tutta la mole di dati la "pagina" viene marcata come "cancellata";
quando compatti in pratica viene creato un secondo database e tutti i
record non marchiati come "cancellato" vengono copiati nel nuovo.
 
**Alcuni database ad altissima velocità NON modificano un record
esistente ma "cancellano" il vecchio e ne creano uno nuovo con i dati
modificati.
 
es: se hai un "libro" con 10.000 pagine e cancelli pagina 4 anzichè
spostare "indietro" 9996 pagine semplicemente pagina 4 viene
marchiata come "cancellata", altrimenti il database diventerebbe
lentissimo ad ogni modifica/cancellazione.

 lentissimo ad ogni modifica/cancellazione.
 
Ora è chiaro, grazie.
Compactdatabase "di VB6" secondo te utilizza lo stesso algoritmo della 
compattazione presente in Access 97?


 compattazione presente in Access 97?
 
non lo so per certo ma non mi stupirei di scoprirlo, in fondo VB6
e access 97 sono contemporanei e il metodo e' (era) universalmente
adottato, probabilmente grazie alla virtualizzazione integrata nei
processori multicore moderni ci saranno algoritmi diversi/piu
performanti, ma credo che vb6 sia "fermo" ai vecchi metodi :D

 i record marcati come "cancellato".
 
Ma anche il preciso ridimensionamento dei campi, come in una matrice diamica recupera moto spazio.
Infatti in database di nessuna cancellazione e nessuna maddica (solo insert) si ha un grande alleggerimento dopo il 
Compact
 
Buon Anno a tutti :)
 
-- 
Greg

 si ha un grande alleggerimento dopo il Compact
 
guarda, non sono così esperto di database da poter confermare o
smentire quanto sopra con presunzione di correttezza, ma da che ne so
io i database ad alta velocità hanno una dimensione record fissa 
proprio
per non dover frullare tabelle d'indice alla ricerca del record
successivo a quello in esame; per inciso se il DB ha record a 
dimensione
fissa basta una moltiplicazione (o una addizione ricursiva) per trovare
il record successivo senza dover passare byte per byte alla ricerca del
marker di inizio/fine record o dover leggere un'indice...
Giusto per soddisfare la mia curiosità: hai qualche esempio di DB che
usa record dinamici ?

 usa record dinamici ?
 
Access, non ho altre esperienze, solo un poco di sqlexpress ma non l'ho mai usato veramente.
 
Per provare fai un database vuoto di access, metti una tabella e 4-5 record e guarda la dimensione. Ricontrolla dopo 
compattazione e vedrai che la dimensione è diminuita.
 
Una volta avevo letto un articolo di un esperto sul Visual Basic Journal, se non ricordo male, dove si diceva che lo 
spazio veniva recuperato riducendo il campo alla dimensione effettiva del dato contenuto
 
-- 
Greg

 viene alleggerito cosa viene eliminato?
 
Che io sappia la cancellazione di un record viene fatta virtualmente, 
flaggando il record vecchio come "cancellato", ma non lo rimuove 
fisicamente. La compattazione crea una nuova copia del database, in cui 
si copiano solo i record attivi.
 
 
 
-- 
la cricca dei giacobini (C) M.G.
 
---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus