VB6应用程序在创建后锁定Access(.mdb)数据库,导致错误3028

VB6应用程序在创建后锁定Access(.mdb)数据库,导致错误3028,vb6,dao,ms-access-97,Vb6,Dao,Ms Access 97,我们的应用程序构建一个Access数据库(.mdb),然后使用Shell命令启动另一个应用程序,该命令需要对该数据库进行读/写访问。问题是,在某些系统上,我们的应用程序似乎不稳定地在数据库上保留独占锁,从而阻止其他应用程序访问它。只有关闭第一个应用程序后,另一个应用程序才能继续 引发的特定错误是错误3028,它似乎是我们实际使用的DAO 3.51(Access'97)的特定错误。我无法理解为什么一些系统会受到影响(然后不一致),而另一些系统则从未受到影响。我认为这可能是一个时间问题,在构建数据库

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

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

发生了什么事

编辑:
我现在创建了一个变通方法,在一个单独的文件中创建数据库,然后复制它。现在,第二个程序应该始终能够访问它,任何剩余的锁问题都将出现在我维护的第一个程序中。稍后,当我们的用户能够测试这一点时,我将继续跟进。

我以前遇到过一个类似的问题,这与您描述的不太一样,但根据您的描述,我将尝试以下方法:

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

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

我通过炮击一个windows批处理文件,然后立即退出原始程序来实现这一点

批量文件组成如下所示:

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

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

在将控制权传递给另一个EXE之前是否关闭与DB的连接?

否我没有。这难道不能扭转问题吗?另一个应用程序持有锁,而第一个程序无法访问它?它们都需要读/写访问权限。一旦初始问题得到解决,读写操作(可能是并发的)就不会引起任何问题。这取决于你的应用程序是如何打开的。从第一个应用程序打开与数据库的连接时,请尝试添加“admodesharedynone”标志。另一个问题可能是您的第二个程序正在以有限的用户权限打开。。。试着用
ShellExecute(Me.hwnd,“runas”,App.Path&“Project.exe”,App.Path,vbNormalFocus)
line(别忘了在模块中声明ShellExecute)。@George我怀疑你的建议是否有用。它们涵盖了错误重复发生而非不稳定发生的情况。此外,使用“runas”,在管理员模式下有效地运行第二个程序,在WinXP中看起来非常难看,并且会产生奇怪的结果。@Dabblernl“不稳定地”只是意味着我们还没有找到模式。其中一种调试方法是消除-消除场景,无论它们多么“丑陋”或“不可能”。看到这个问题还没有解决,很有可能这个问题就是那些丑陋和不太可能的情况之一。如果你决定尝试,请让我知道我的建议的结果。