2

我们的应用程序构建了一个 Access 数据库 (.mdb),然后使用Shell需要对该数据库进行读/写访问的命令启动另一个应用程序。问题是在某些系统上,我们的应用程序似乎不规律地在数据库上保留了排他锁,从而阻止了其他应用程序访问它。只有在关闭第一个应用程序后,另一个应用程序才能继续。

引发的特定错误是错误 3028,这似乎是我们确实使用的 DAO 3.51 (Access '97) 所特有的。我无法理解为什么有些系统会受到影响(然后又不一致)而其他系统则不会。我认为这可能是一个时间问题,并且是Sleep在构建数据库和启动其他应用程序之间的一段时间内构建的,但这并没有帮助。

到底是怎么回事?

编辑:我现在通过在单独的文件中创建数据库然后复制它来创建解决方法。现在第二个程序应该始终能够访问它,并且任何剩余的锁定问题都会出现在我维护的第一个程序中。当我们的用户能够对此进行测试时,我将在稍后跟进。

4

2 回答 2

2

您是否在将控制权传递给另一个 EXE 之前关闭了与数据库的连接?

于 2012-11-22T15:38:00.577 回答
0

我以前遇到过类似的问题,但并不完全相同,但根据您的描述,这是我会尝试的方法:

在使用 shell 命令启动辅助应用程序之前。

除了您已经使用的睡眠时间之外,您还需要关闭生成 .mdb 文件的原始程序。

我通过对 Windows 批处理文件进行脱壳,然后立即退出原始程序来实现这一点。

批处理文件构成如下:

ping -n 5 localhost >NUL
start MSAccess.exe "C:\DB.mdb"
exit

这允许在启动之前释放 mdb 文件 5 秒,您可以用您的辅助程序替换我的 Ms Access 调用。

于 2012-11-22T12:37:24.940 回答