如何自动压缩和修复Access 2007数据库?

时间:2010-06-27 17:56:29

标签: database ms-access asp-classic automation corruption

我有一个使用经典ASP和Access 2007格式(.accdb)数据库的站点。它使用密码加密,文件大小约为300 MiB。

该网站本身可以正常运行,但数据库时不时会被破坏(错误是“无法识别的数据库格式”)。可以通过在MS Access中打开数据库轻松修复,然后修复它。问题是我注意到数据库损坏可能需要几天时间,在此期间网站将无用。有时每次腐败需要几个月,其他时间只需一两周。

我想要的是网站能够不时地(每天一次)调用“压缩和修复数据库”功能本身,以使数据库保持工作状态。

我的问题是如何做到这一点,让它自行修复?

我找到了这篇文章:How do I compact and repair an ACCESS 2007 database by .NET code? ......但我不明白我是如何为我做这项工作的。我只知道经典的ASP和Java。

任何人都可以编写一些隔离的ASP代码来执行此操作:“打开与密码保护的数据库的连接”,“修复数据库”,“关闭连接”。

网站和数据库位于我完全控制的专用服务器上,因此我可以实施任何存在的解决方案。

非常感谢!

3 个答案:

答案 0 :(得分:0)

您可以编写一个不时修复数据库的脚本。但有两个问题:

1)如何检测数据库是否已损坏 2)如何最大限度地减少数据丢失。

最大的问题是您正在尝试解决访问数据库本身存在的问题(频繁的数据损坏)。因此,该产品不适合任何严肃的应用。那么为什么不切换到更可靠的数据库呢? (MS SQL,MYSQL,ORACLE,SQL Lite等等可供选择)。

答案 1 :(得分:0)

SQL Server Express是否可以合法许可在Web服务器上使用?如果是这样,那么我建议将数据移动到它。如果没有,其他地方提到的其他选项。在下面的页面SQL Server 2008 Express中,我看到了Web平台安装程序的提及,因此您可以在Web服务器上使用它。但是我不解释EULA所以我把这个决定留给你。

答案 2 :(得分:0)

我在另一个问题中得到了我需要的答案: Why can't I use "CompactDatabase" in DAO.DBEngine.36 using VBscript?

用户“HansUp”给了我以下代码:

Dim objFSO 
Dim objEngine 
Dim strLckFile 
Dim strSrcName 
Dim strDstName 
Dim strPassword

strLckFile = "C:\Access\webforums\foo.laccdb" strSrcName = "C:\Access\webforums\foo.accdb" strDstName = "C:\Access\webforums\compacted.accdb" strBackup = "C:\Access\webforums\foobackup.accdb" strPassword = "foo"

Set objEngine = CreateObject("DAO.DBEngine.120")

Set objFSO = CreateObject("Scripting.FileSystemObject") If Not (objFSO.FileExists(strLckFile)) Then If (objFSO.FileExists(strBackup)) Then objFSO.DeleteFile strBackup End If If (objFSO.FileExists(strDstName)) Then objFSO.DeleteFile strDstName End If objFSO.CopyFile strSrcName, strBackup

''dbVersion120 = 128  
objEngine.CompactDatabase strSrcName, strDstName, , 128, ";pwd=" & strPassword

objFSO.DeleteFile strSrcName 
objFSO.MoveFile strDstName, strSrcName 

End If 'LckFile

(当我因某种原因复制代码时,代码得到了一些额外的换行符,如果你愿意的话,请点击本文开头的链接获得更清晰的代码版本。)

它将Access 2007数据库压缩为Access 2007数据库(无格式更改)并且还会修复数据库中的任何损坏(不一致状态)!正是我在寻找的东西。 =)