存在一个修复程序,我已经为我维护的 MS-Access 应用程序安装了它。但是不方便,实现起来也不简单。
首先,关于锁定文件和锁定文件的一些背景知识。
锁定文件是一个有用的工具,但它是一个指示器,而不是实际的锁定:您可以编辑它,但没有任何效果。
如果实时 MS-Access 会话编辑数据、更改对象(例如:索引表)或执行维护任务,则可以在 .accdb 或 .mdb 后端数据库文件上保持文件锁定。该列表中的最后两项很少见 - 影响您在会话中打开的文件之外的另一个数据库文件需要一些努力,但有时会在野外观察到 - 但关闭这些会话应该释放锁定并且几乎总是将要。
崩溃的 MS-Access 会话可以保持对 .accdb 或 .mdb 后端数据库文件的文件锁定。强制重启有问题的机器应该释放锁,而且大部分都会释放。
您可以使用锁定文件(.ldb 或 .laccdb)跟踪那些
使用 ODBC 或 ADO 连接 Access 数据库的第三方报告应用程序应将其连接设置为只读,以便它们无法锁定文件。如果幸运的话,系统所有者使用您控制的 dsn 文件,您可以看到该设置。
一些报告应用程序,如 QLikView,是不透明的界面,需要完整的文件名,没有人知道接下来会发生什么:可能会锁定,也可能不会。你没有办法知道。
一些报告应用程序 - 和 Excel 数据透视表 - 可能会链接到您的数据库,而所有者根本不会告诉您。如果他们的连接配置错误,他们可以在检索时锁定您的表:并且终止客户端会话可以使锁定保持在原位。无聊的 Excel 用户一直在观看缓慢的枢轴“刷新”。
更糟糕的是,一些第三方系统可能需要写入数据:应该避免这种情况 - 通过 Access 客户端应用程序!- 但你并不总是能做出那个决定。
如果幸运的话,连接对象配置正确,因此机器 ID 在连接字符串中,确保它会出现在锁定文件中,并允许您找到带有锁的机器......
也许他们会这样做:通常他们不会。
...请注意,对于您关心的问题,行锁定查询、页面锁定查询和表锁定查询在功能上是相同的:如果您需要在“文件”级别执行某些操作(如压缩和修复),该文件已锁定您。在该锁被释放之前,您将被锁定。
您可能无法识别机器。您可能会也可能无法强制他们离开网络。它们在正常操作中可能会或不会成功释放锁,如果它们崩溃,它们几乎肯定不会。
所以:这不是一张漂亮的照片。
在公司环境中,您最好的解决方案是使用“手指”工具直接与网络管理员联系,以确定谁在锁定数据库文件、联系用户的能力以及断开有问题的会话的能力。
失效模式有:
- 如果您的组织结构不允许您建立这种沟通渠道,那您就完蛋了。
- 如果您组织的网络管理员没有能力或权限在有用的时间范围内执行此操作,那么您就完蛋了。
- 如果您组织的网络管理员选择不这样做,那您就完蛋了。
但是,我确实为我的 MS-Access 应用程序进行了修复:
我使用的解决方法非常激进 - 不是将铁锹穿过建筑物的电源的“核选项”,或者屈服于系统管理员对人类牺牲的要求,但是非常不愉快并且实施大量荒谬的工作:
- 配置客户端 - 您的 MS-Access 前端应用程序 - 在命名的后端数据库之间轻松切换。
- 同样,您编写并允许其他应用程序使用的 dsn 文件应该可以由预先存在的脚本访问,以将“DBQ=”或“数据源=”子句编辑为新文件名。
- 获取数据库文件的副本,将其保存到本地临时文件夹以进行所需的维护工作,然后以新名称将其重新发布到应用程序的“数据”文件夹中。
- 现在运行“更改后端”脚本或 VBA 函数...
- ......还有其他任何使用旧的、锁定的后端文件的人。
提示:实现您的前端应用程序,以便它定期轮询后端数据库(或其他一些资源,您最坏的情况是完全锁定)以执行“维护关闭”或“更改数据库”指令是明智的放入您的“主菜单”表单的计时器事件。
此外,还有代码可以自动切换链接表的源数据库。