我们有一个基于MS Access的系统,它依赖于存储在联网的MS Access数据库中的后端数据。有时,当发生随机网络问题时,这些数据库会被破坏。所以我们认为我们应该添加一些可以定期启动紧凑和修复的过程。
问题是该数据库一直被多个用户使用,并且无法保证在数据库未使用时知道某个时间可用。所以我的问题如下。
1)如果在前端应用程序(MS Access或.NET)尝试连接数据库时正在进行数据库管理,会发生什么?那可以吗?
2)SO推荐什么作为一个很好的解决方案,让前端应用程序都等到后端MS Access数据库可以使用?前端应用程序所需的更改越少越好。
谢谢!
答案 0 :(得分:3)
这是Access开发人员中一个相对常见的问题。
它有两个部分:
用于备份和压缩数据库的代码,您可以在服务器上安排该数据库。
您放在前端的代码,用于在允许#1中的代码运行的情况下自动将所有人记录下来。
一般来说,办公室只在当地时间上午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,则必须阅读并阅读。