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