esempi e tutorial

COMPATTARE UN DATABASE ACCESS

Quando si elimina uno o più record di un database Access in realtà questi vengono cancellati solo "visivamente", ovvero il database conserva tutti i riferimenti ai record eliminati. Se provate infatti a confrontare le dimensioni in kilobyte di un database Access prima e dopo aver eliminato molti record (o una tabella intera) noterete che queste non variano, per vedere il calo di "peso" (e per ripristinare il contatore di una tabella che sia stata completamente svuotata) si deve eseguire l'utilità "compatta/ripristina database" dal menù "strumenti>utilità database" di Access. Lo stesso problema si verifica con i database Access usati nei siti web, quindi, onde evitare di dover scaricare il database-compattarlo-ricaricarlo, si può eseguire la stessa operazione con una semplice pagina come quella riportata nel listato seguente.

<%@ Page Language="VB" ContentType="text/html" ResponseEncoding="utf-8" %>
<%@ Import namespace="System.IO" %>
<%@ Import namespace="System.Data" %>
<script runat="server">
sub comp_db( s as Object, e as EventArgs )
'questo è il database da compattare
Dim db as string="cartella/nomeDb.mdb"
Dim database, database2 as String
Dim bytePre as integer
Dim byteAft as integer
database = Request.MapPath( db )
'nomeDb2 è il database provvisorio compattato
database2 = Request.MapPath( "cartella/nomeDb2.mdb" )
'connessioni ai due database
Dim strConn as String = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & database
Dim strConnTo as String = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & database2
'creo l'oggetto per compattare
Dim objJro as Object = Server.CreateObject( "jro.JetEngine" )
'compatto il database
objJro.CompactDatabase( strConn,strConnTo )
objJro = Nothing
'recupero un pò di informazioni sui due database
Dim pre as new FileInfo( database )
Dim aft as new FileInfo( database2 )
'dimensione prima del compattamento (database originale)
bytePre = pre.Length/1024
'dimensione dopo il compattamento (database provvisorio)
byteAft = aft.Length/1024
'copio il database compattato su quello da compattare sovrascrivendolo
System.IO.File.Copy( database2, database, true )
'cancello il database provvisorio
System.IO.File.Delete( database2 )
lbl.Text = "kilobyte originari: "& bytePre &" kb<br>kilobyte compattati: "& byteAft &" kb"
end sub
</script>
<html>
<head>
<title>compatta database</title>
</head>
<body>
<form id="myForm" runat="server">
<asp:Button ID="btn" Text="compatta database :." OnClick="comp_db" runat="server" /><br>
<asp:label id="lbl" runat="server" />
</form>
</body>