自动紧凑和修复MS Access数据库

时间:2010-11-12 22:07:03

标签: .net ms-access concurrency corruption compact-database

我们有一个基于MS Access的系统,它依赖于存储在联网的MS Access数据库中的后端数据。有时,当发生随机网络问题时,这些数据库会被破坏。所以我们认为我们应该添加一些可以定期启动紧凑和修复的过程。

问题是该数据库一直被多个用户使用,并且无法保证在数据库未使用时知道某个时间可用。所以我的问题如下。

1)如果在前端应用程序(MS Access或.NET)尝试连接数据库时正在进行数据库管理,会发生什么?那可以吗?

2)SO推荐什么作为一个很好的解决方案,让前端应用程序都等到后端MS Access数据库可以使用?前端应用程序所需的更改越少越好。

谢谢!

3 个答案:

答案 0 :(得分:3)

这是Access开发人员中一个相对常见的问题。

它有两个部分:

  1. 用于备份和压缩数据库的代码,您可以在服务器上安排该数据库。

  2. 您放在前端的代码,用于在允许#1中的代码运行的情况下自动将所有人记录下来。

  3. 一般来说,办公室只在当地时间上午8点到下午6点开放,因此通常可以安全地将所有人赶出午夜,以便后端可以在凌晨1点进行备份和压缩,以备例如,凌晨2点可能发生的常规文件服务器备份。

    备份/压缩的VBScript相对容易编写。如果您需要帮助,请询问。

    对于前端,您需要有一个隐藏的表单,当应用程序打开时会打开一个隐藏的表单,其上设置了一个计时器,该计时器将在午夜启动并关闭应用程序。你想要得到多么精致取决于。如果用户已经开始记录并且处于无法保存的状态(由于某种原因未通过验证规则),则可能存在陷阱。这可能很复杂(您必须陷入错误,撤消树桩记录,然后您可以关闭),但最好设计您的应用程序,以便用户无法创建无法保存的记录。 / p>

    关键是你必须计划这两端,安排和关闭计划运行备份/压缩时剩余的所有连接。

答案 1 :(得分:1)

据我所知,让它自动压缩数据库是个坏主意。如果在压缩之前存在可恢复的错误,则可能最终导致数据库完全无法读取 - 需要从备份进行还原。

1>如果前端尝试访问正在压缩/修复的数据库,我相信前端客户端被告知数据库不可用并且被毫不客气地弹出。我相信你可以为此编写一个错误处理程序,但这需要比我提供的更多的VBA知识。

2 - ;如果可能的话,在处理多个客户端时 - 后端的RDBMS总是会表现得更好,即使它是备用Windows机箱上的Microsoft SQL Server Express。当“坏事”发生时(网络断开连接,客户端锁定等),数据将有更好的机会不被破坏。带有事务的RDBMS通常是一个很好的途径。

就解决方案而言,恐怕我缺乏编程方面的想法。遗憾。

答案 2 :(得分:0)

Garry Robinson关于访问安全的书讨论了这个问题。值得一读。在Garry的网站(vb123.com)上,他销售的工具箱中包含许多管理和安全工具,包括一个为每个连接的工作站发出警告,然后在x秒后关闭前端的工具箱。

这本书是:

Real World Microsoft Access Database Protection and Security

如果您在企业环境中使用Access,则必须阅读并阅读。