0

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

该站点本身运行良好,但有时数据库会损坏(错误是“无法识别的数据库格式”)。它可以通过在 MS Access 中打开数据库轻松修复,然后将其修复。问题是我可能需要几天时间才能注意到数据库已损坏,并且在此期间该站点将毫无用处。有时每次腐败之间需要几个月的时间,有时只需一两个星期。

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

我的问题是我该怎么做,让它自己修复?

我找到了这篇文章:如何通过 .NET 代码压缩和修复 ACCESS 2007 数据库? ...但我不明白我如何才能让它为我工作。我只知道经典的 ASP 和 Java。

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

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

非常感谢!

4

3 回答 3

0

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

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

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

于 2010-06-27T18:33:21.960 回答
0

我在另一个问题中得到了我需要的答案: 为什么我不能使用 VBscript 在 DAO.DBEngine.36 中使用“CompactDatabase”?

用户“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 数据库(无格式更改),它还修复了数据库中的任何损坏(不一致的状态)!正是我想要的。=)

于 2010-06-30T12:13:58.953 回答
0

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

于 2010-06-27T23:19:06.547 回答