设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1087|回复: 3
打印 上一主题 下一主题

[其它] Access 数据库在线压缩

[复制链接]
跳转到指定楼层
1#
发表于 2002-10-8 23:03:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

如果在 Access 数据库中删除数据或对象,或者在 Access 项目中删除对象,Access 数据库或 Access 项目可能会产生碎片并会降低磁盘空间的使用效率。压缩 Access 数据库或Access项目实际上是复制该文件,并重新组织文件在磁盘上的存储方式。压缩同时优化了 Access 数据库和 Access 项目的性能。
  所以我们在对日益增大的数据库导致的ASP程序慢得无法忍受的时候,就想到了要压缩他。但常规的做法把他下载到本地然后用MSaccess来完成压缩操作,然后再上传!后来我想是否可以在线实现对ACCESS数据库的压缩呢?为此我查了一些资料,但还是不得要领,偶然在动网下载看到一篇文章,原文如下:

While working on BuildDB/Buildapp online Demo, I developed a little function that will compact Access databases over the web. Here's a "no-frills" page that'll compact the databases for you.
  One problem with Access databases is that "holes" are created when records are deleted, making the database fluffy and bloated. Compacting the database makes it lean and efficient again.

Note: This function/page can easily be combined with the Buildapp front end file navigation and search pages (Installment II), to create an application that'll make it easy to handle this formerly troublesome chore for all the databases on your machine/web site..


  ++++++++++++ Begin Compact.asp +++++++++++++++++++++++++++++
  %
  option explicit
  Const JET_3X = 4

Function CompactDB(dbPath, boolIs97)
  Dim fso, Engine, strDBPath
  strDBPath = left(dbPath,instrrev(DBPath,"\"))
  Set fso = CreateObject("Scripting.FileSystemObject")

If fso.FileExists(dbPath) Then
  Set Engine = CreateObject("JRO.JetEngine")

If boolIs97 = "True" Then
  Engine.CompactDatabase "rovider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbpath, _
  "rovider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDBPath & "temp.mdb;" _
  & "Jet OLEDB:Engine Type=" & JET_3X
  Else
  Engine.CompactDatabase "rovider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbpath, _
  "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDBPath & "temp.mdb"
  End If
  fso.CopyFile strDBPath & "temp.mdb",dbpath
  fso.DeleteFile(strDBPath & "temp.mdb")
  Set fso = nothing
  Set Engine = nothing
  CompactDB = "Your database, " & dbpath & ", has been Compacted" & vbCrLf
  Else
  CompactDB = "The database name or path has not been found. Try Again" & vbCrLf
  End If

End Function
  %
  htmlheadtitleCompact Database/title/headbody

h2 align="center" Compacting an Access database/h2
  p align="center"
  form action=compact.asp
  Enter relative path to the database, including database name.brbr
  input type="text" name="dbpath"brbr
  input type="checkbox" name="boolIs97" value="True" Check if Access 97 database
  bri (default is Access 2000)/ibrbr
  input type="submit"
  form
  brbr
  %
  Dim dbpath,boolIs97
  dbpath = request("dbpath")
  boolIs97 = request("boolIs97")

If dbpath "" Then
  dbpath = server.mappath(dbpath)
  response.write(CompactDB(dbpath,boolIs97))
  End If
  %
  /p/body/html

++++++++++++ End Code

我在本机测试获得成功,又上网对自己的动网论坛实施了压缩操作结果也完全正常,数据库从原来的3.7M压缩到了2.1M从而证实是可行的。需要注意的是:本程序其实是通过FSO权限和JET引擎连接,因此在使用之前请确认你的服务器支持FSO(filesystemobject)权限并安装的ACCESS最新驱动!从安全出发,请在压缩之前备份原始数据库!已经测试通过的运行环境:
  WIN98SE+PWS、WIN2000+IIS5.0

下面是我整理后的源代码,复制另存为compact.asp并上传到数据库所在目录即可正常使用。

html
  head
  titleACCESS数据库压缩程序/title
  /head
  body bgcolor="e0f8ef"
  div
   div align="center"font color="#3300FF"bfont size="5"通用ACCESS数据库在线压缩程序/font/b/fontbr
   /div
   divbr
   本程序其实是通过FSO权限和JET引擎连接,因此在使用之前请确认你的服务器支持FSO(filesystemobject)权限并安装的ACCESS最新驱动!从安全出发,请在压缩之前备份原始数据库!/divbr
   div align="center"运行环境:在WIN98SE+PWS、WIN2000+IIS5.0 br
   %
  Const JET_3X = 4
  Function CompactDB(dbPath, boolIs97)
  Dim fso, Engine, strDBPath
  strDBPa
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2003-12-28 23:25:00 | 只看该作者
让我也试试……
3#
发表于 2003-12-29 00:46:00 | 只看该作者
怎么这篇文章乱成这样?
4#
发表于 2008-11-24 15:45:29 | 只看该作者

学习!!!

学习!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2025-2-18 16:12 , Processed in 0.121820 second(s), 28 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表