2

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

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

1) 如果在前端应用程序(MS Access 或 .NET)尝试连接数据库时正在 c/r'ed 数据库,会发生什么情况?那样可以么?

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

谢谢!

4

3 回答 3

4

这是 Access 开发人员中比较常见的问题。

它有两个部分:

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

  2. 您放入前端的代码,以便在允许 #1 中的代码运行的时间自动注销每个人。

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

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

对于前端,您需要有一个隐藏表单,该表单在应用打开时打开,上面有一个计时器,设置为在午夜启动并关闭应用。您想获得的详细程度取决于。潜在的陷阱是如果用户已经开始记录并且它处于无法保存的状态(由于某种原因未能通过验证规则)。这可能很复杂(您必须捕获错误,撤消树桩记录,然后您可以关闭),但最好设计您的应用程序,以便用户永远无法创建无法保存的记录。

关键是您必须计划这两端,计划和关闭在您的备份/压缩计划运行时保留的任何连接。

于 2010-11-13T21:43:10.520 回答
1

据我了解,让它自动压缩数据库是一个坏主意。如果在压缩之前出现可恢复的错误,那么之后您可能会得到一个完全不可读的数据库——需要从备份中恢复。

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

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

至于对此的解决方案,恐怕我缺乏程序化的想法。对不起。

于 2010-11-12T22:23:47.890 回答
0

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

这本书是:

真实世界 Microsoft Access 数据库保护和安全

如果您在公司环境中使用 Access,则必须拥有并阅读它。

于 2010-11-13T11:38:44.903 回答