Kategorien:
Suchbegriffe:
Suchfelder:
Suche starten
Neue Beiträge / Top 7
Alle Artikel / Liste
Bücher zu ASP/ASP.Net
Startseite / Hilfe
Fragen zu ASP/ASP.NET
Datenschutzrichtlinen
Impressum / Kontakt
Das ASP.Net Codebook. Die unentbehrliche Referenz für alle ASP.Net-Entwickler [Autoren: Stefan Falz, Karsten Samaschke]
Active Server Pages-FAQ
Active Server Pages - FAQ (v. 1.50) © 2000 - 2020 by Stefan Falz Webconsulting

GetFile! Dynamischer Dateiupload im Browser

Datenbankzugriffe Zurück Druckversion Stefan Falz 12.09.2002
Frage: Wie kann ich eine Access Datenbank online komprimieren?
Sie kennen sicherlich das Problem, dass eine Access-Datenbank, die Sie online verwenden, ständig
an Größe zunimmt, obwohl Sie schon viele Daten oder auch ganze Tabellen wieder aus der Datenbank
entfernt haben. Der Grund für dieses Wachstum ist eigentlich recht einfach. Bei jedem Löschvorgang
werden die Daten nicht physikalisch gelöscht, sondern es wird lediglich ein Löschflag auf diesen
Datensatz oder dieses Element gesetzt. Die Daten selbst bleiben hiervon unberührt. Nach aussen hin
sind die Daten zwar nicht mehr vorhanden, aber wenn sich die Datei einmal mit einem Texteditor
ansieht, werden Sie sehen, dass fast alle Daten noch vollständig vorhanden sind. Fast hat den Grund,
dass neu eingefügte Datensätze evtl. auf den gleichen Dateibereich geschrieben werden, den vorher
ein nun gelöschter Datensatz belegt hat.

Es gibt in Access zwar die Möglichkeit, eine Datenbank zu komprimieren. Beim Komprimieren werden
die gelöschten Daten physikalisch aus der Datenbank entfernt und ungenutzter Speicherplatz wird
wieder freigegeben. In unserem Beispiel haben wir eine Tabelle mit 50.000 Datensätzen gelöscht.
Die Datenbank ist nach der Komprimierung um mehr als 7 MB kleiner geworden. Sie sehen also, dass
dies schon eine Menge ausmachen kann.

Die Komprimierung ist aber nur mit Access selbst möglich. Sie müssten die Datei also zuerst einmal
auf ihren Computer herunterladen, die Datenbank in Access öffnen, komprimieren und die Datei
anschließend wieder auf den Webserver hochladen.  Diese Vorgehensweise hat natürlich einige
Nachteile. Zuerst einmal könnte es sein, dasss während Sie die Datei herunterladen, komprimieren
oder wieder hochladen, neue Datensätze in die Onlinedatenbank eingefügt oder Daten aktualisiert
werden. Dies können Sie zwar umgehen, indem Sie ihre Anwendung für diese Zeit sperren. Wenn
die Datenbank aber sehr groß ist, dauert dies natürlich eine ganze Weile, was ihre Besucher
wahrscheinlich nicht sehr freuen wird.

Dieses Problem haben Sie mit dem folgenden Skript nicht mehr. Sie können damit eine Accessdatenbank
online auf ihrem Webserver komprimieren. Es sind allerdings mehrere Schritte für diesen Vorgang
notwendig.
Im ersten Schritt sollten Sie die alte Datenbank sichern. Dies machen wir innerhalb des Skripts mit Hilfe
des FSO. Danach erfolgt die eigentliche Komprimierung. Da Sie aber, wie in Access selbst auch, als
Zieldatei nicht dieselbe Datenbank angeben können, wird bei der Komprimierung eine temporäre Datei
erzeugt. Diese wird dann wieder mit dem FSO umbenannt, so dass Sie den Namen der Ursprungsdatenbank
erhält.


[compress.asp]
<%
Dim strProvider
    strProvider = "PROVIDER=Microsoft.Jet.OLEDB.4.0;"

Dim strPath
    strPath = Server.MapPath("./database/") & "\"

Dim strDatabase1
    strDatabase1 = "compress.mdb"
Dim strDatabase2
    strDatabase2 = "compress_temp.mdb"

Dim strConnect1
    strConnect1 = strProvider & "DATA SOURCE=" & strPath & strDatabase1 & ";"
Dim strConnect2
    strConnect2 = strProvider & "DATA SOURCE=" & strPath & strDatabase2 & ";"

Dim objJetEngine
Set objJetEngine = Server.CreateObject("JRO.JetEngine")

Dim objFileSys
Set objFileSys = Server.CreateObject("Scripting.FileSystemObject")

    ' --- Sichern der Originaldatenbank
    objFileSys.CopyFile strPath & strDatabase1, strPath & "sicherung_" & strDatabase1

    ' --- Komprimieren der Datenbank
    objJetEngine.CompactDatabase strConnect1, strConnect2
    
    ' --- Löschen der Originaldatenbank
    objFileSys.DeleteFile strPath & strDatabase1

    ' --- Unkopieren der komprimierten Datenbank
    objFileSys.MoveFile strPath& strDatabase2, strPath & strDatabase1
    
Set objFileSys = Nothing
Set objJetEngine = Nothing
%>


Sehr gut
1 2 3 4 5 6
Ungenügend
Zurück | Bisherige Aufrufe: 21924 | Bisherige Bewertungen: 50 | Durchschnitt: 1,54
Stefan Falz Webconsulting