Если вы удаляете данные или объекты в базе данных Access или удаляете объекты в проекте Access, база данных Access или проект Access могут стать фрагментированными и использовать дисковое пространство менее эффективно. Сжатие базы данных Access или проекта Access фактически копирует файл и реорганизует способ его хранения на диске. Сжатие оптимизирует производительность как баз данных Access, так и проектов Access.
Поэтому, когда мы обнаружили, что программа ASP работает невыносимо медленно из-за постоянно растущей базы данных, мы подумали о ее сжатии. Но традиционный подход состоит в том, чтобы загрузить его локально, а затем использовать MSaccess для завершения операции сжатия, а затем загрузить его!
Следует отметить, что эта программа на самом деле подключена к движку JET через разрешения FSO, поэтому перед ее использованием убедитесь, что ваш сервер поддерживает разрешения FSO (объект файловой системы), и установите последнюю версию драйвера ACCESS! В целях безопасности перед сжатием создайте резервную копию исходной базы данных! Среды, прошедшие проверку:
WIN98SE+PWS, WIN2000+IIS5.0
Ниже приведен скомпилированный мной исходный код. Скопируйте и сохраните его как Compact.asp и загрузите в каталог, где находится база данных, для обычного использования.
<html>
<голова>
<title>Программа сжатия базы данных ACCESS</title>
</голова>
<body bgcolor="e0f8ef">
<дел>
<div align="center"><font color="#3300FF">
<b><font size="5">Программа онлайн-сжатия баз данных Universal ACCESS</font></b></font><br>
</div>
<div><br>
Эта программа фактически подключена к движку JET через разрешения FSO.
Поэтому перед его использованием убедитесь, что ваш сервер поддерживает FSO.
(filesystemobject) и установите последнюю версию драйвера ACCESS!
В целях безопасности перед сжатием создайте резервную копию исходной базы данных! </div><br>
<div align="center">Операционная среда: WIN98SE+PWS, WIN2000+IIS5.0 <br>
<%
Константа JET_3X = 4
Функция CompactDB(dbPath, boolIs97)
Dim fso, Engine, strDBPath
strDBPath = left(dbPath,instrrev(DBPath,""))
Set fso = CreateObject("Scripting.FileSystemObject")
Если fso.FileExists(dbPath) Тогда
Set Engine = CreateObject("JRO.JetEngine")
Если boolIs97 = "True" Тогда
Engine.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Источник данных=" & dbpath, _
"Provider=Microsoft.Jet.OLEDB.4.0;Источник данных=" & strDBPath & "temp.mdb;"
& "Jet OLEDB:Тип двигателя=" & JET_3X
Еще
Engine.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Источник данных=" & dbpath, _
"Provider=Microsoft.Jet.OLEDB.4.0;Источник данных=" & strDBPath & "temp.mdb"
Конец, если
fso.CopyFile strDBPath & «temp.mdb», dbpath
fso.DeleteFile(strDBPath & «temp.mdb»)
Установить fso = ничего
Установить двигатель = ничего
CompactDB = "Ваша база данных " & dbpath & " сжата" & vbCrLf
Еще
CompactDB = «Введенный вами путь к базе данных или имя не найдены, попробуйте еще раз» & vbCrLf
Конец, если
Конечная функция
%>
</div>
</div>
<form name="compact" Method="post" action="compact.asp">
<div align="center">
<font size="2"><b><font color="#FF0000">
Параметры сжатия, пожалуйста, заполняйте внимательно! </font></b><br>
<br>
Введите полное имя базы данных:
<input type="text" name="dbpath">
(Включает такие расширения, как MDB, ASA, ASP и т. д.)<br>
<br>
<input type="checkbox" name="boolIs97" value="True">
Проверьте, является ли это базой данных ACCESS97<br>
(По умолчанию используется база данных ACCESS2000)<br>
<br>
<input type="submit" name="submit" value="Подтвердить сжатие">
</font></div>
</форма>
<div align="center"><font size="2">
<%
Тусклый dbpath,boolIs97
dbpath = запрос («путь к базе данных»)
boolIs97 = request("boolIs97")
Если dbpath <> "" Тогда
dbpath = server.mappath(dbpath)
response.write(CompactDB(dbpath,boolIs97))
Конец, если
%>
<br>
</font></div></body></html>