我们的应用程序构建一个Access数据库(.mdb),然后使用Shell
命令启动另一个应用程序,该命令需要对此数据库进行读/写访问。问题是,在某些系统上,我们的应用程序似乎不正确地保留对数据库的独占锁定,阻止其他应用程序访问它。只有在关闭第一个应用程序后,其他应用程序才能继续。
引发的特定错误是错误3028,这似乎特定于我们确实使用的DAO 3.51(Access '97)。我无法理解为什么有些系统受到影响(然后不一致)而其他系统从未受到影响。我认为这可能是一个时间问题,并且在构建数据库和启动其他应用程序之间建立Sleep
期间,但这没有用。
发生了什么事?
编辑: 我现在通过在单独的文件中创建数据库然后复制它来创建一个解决方法。现在第二个程序应该始终能够访问它,任何剩余的锁定问题都将出现在我维护的第一个程序中。稍后当我们的用户能够测试时,我会跟进。
答案 0 :(得分:2)
在将控制传递给另一个EXE之前,您是否关闭了与DB的连接?
答案 1 :(得分:0)
我之前遇到过类似的问题并不完全相同,但根据您的描述,这是我会尝试的方法:
在使用shell命令启动辅助应用程序之前。
除了您已经使用的睡眠时间,您还需要关闭生成.mdb文件的原始程序。
我通过炮制Windows批处理文件,然后立即退出原始程序来实现此目的。
批处理文件构成如下:
ping -n 5 localhost >NUL
start MSAccess.exe "C:\DB.mdb"
exit
这允许在启动之前释放mdb文件5秒钟,您可以用您的辅助程序替换我的Ms Access调用。