我有一个使用经典ASP和Access 2007格式(.accdb)数据库的站点。它使用密码加密,文件大小约为300 MiB。
该网站本身可以正常运行,但数据库时不时会被破坏(错误是“无法识别的数据库格式”)。可以通过在MS Access中打开数据库轻松修复,然后修复它。问题是我注意到数据库损坏可能需要几天时间,在此期间网站将无用。有时每次腐败需要几个月,其他时间只需一两周。
我想要的是网站能够不时地(每天一次)调用“压缩和修复数据库”功能本身,以使数据库保持工作状态。
我的问题是如何做到这一点,让它自行修复?
我找到了这篇文章:How do I compact and repair an ACCESS 2007 database by .NET code? ......但我不明白我是如何为我做这项工作的。我只知道经典的ASP和Java。
任何人都可以编写一些隔离的ASP代码来执行此操作:“打开与密码保护的数据库的连接”,“修复数据库”,“关闭连接”。
网站和数据库位于我完全控制的专用服务器上,因此我可以实施任何存在的解决方案。
非常感谢!
答案 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数据库(无格式更改)并且还会修复数据库中的任何损坏(不一致状态)!正是我在寻找的东西。 =)