我们有一个基于MS访问的系统,该系统依赖于存储在网络的MS Access数据库中的后端数据。有时,当发生随机网络问题时,这些数据库会损坏。因此,我们认为我们应该添加某种过程,这些过程通常会定期发射紧凑和维修。

问题在于,多个用户一直使用此数据库,并且不能保证知道当数据库不使用时将有一定时间。因此,我的问题如下。

1)如果在前端应用程序(MS Access或.NET)试图连接到它时,数据库是C/R'ED,将会发生什么?那样行吗?

2)建议什么作为使前端应用程序都等待的好解决方案,直到后端MS Access数据库准备就绪?前端应用所需的更改越少。

谢谢!

有帮助吗?

解决方案

这是访问开发人员中相对频繁提出的问题。

它有两个部分:

  1. 您要在服务器上安排的备份和压缩数据库的代码。

  2. 您放在前端的代码可以在允许#1中的代码运行的时间自动登录每个人。

通常,一个办公室仅在当地时间上午8点至下午6点开放,因此通常可以安全地将所有人在午夜左右踢出去,以便可以备份和紧凑端,例如凌晨1点,以准备您的常规文件服务器备份可能会在凌晨2点发生。

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

对于前端,您需要在应用程序打开时打开一个隐藏的表单,并在其上打开一个计时器,该计时器将在午夜启动并关闭应用程序。您想获得的详细说明取决于这一点。潜在的陷阱将是如果用户启动了记录,并且处于无法保存的状态(由于某种原因而失败验证规则)。这可能很复杂(您必须陷入错误,撤消树桩记录,然后您可以关闭),但是最好设计您的应用程序,以便用户无法创建无法保存的记录。

关键点是,您必须计划这两端,计划并关闭在安排备份/紧凑型时保留的任何连接。

其他提示

据我了解,使其自动紧凑数据库是一个坏主意。如果在压实之前存在可恢复的错误,则可能最终会出现一个完全无法读取的数据库 - 需要从备份中还原。

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

2>如果可能的话,在与多个客户端打交道时 - 即使是备用Windows盒子上的Microsoft SQL Server Express,后端上的RDBMS总是会更好。当发生“坏事”(网络断开连接,客户端锁定等)时,数据将有更大的机会不损坏。带有交易的RDBM通常是为此的好途径。

就解决方案而言,恐怕我以编程方式缺乏想法。对不起。

加里·罗宾逊(Garry Robinson)关于访问安全协议的书。值得一读。在Garry的网站(vb123.com)上,他出售了一个工具箱,其中包含许多管理员和安全工具,其中包括向每个连接的工作站发出警告,然后在后面关闭前端x秒。

这本书是:

现实世界Microsoft访问数据库保护和安全性

如果您在公司环境中使用访问权限,则必须阅读和阅读。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top