需要解决方案 - 运行程序的2个用户

时间:2010-07-19 14:20:05

标签: ms-access vba

所以我开发了这个 Access 2007 应用程序,包含大约2个表单,大量VBA代码和一堆表。

现在,企业希望通过网络驱动器运行它(例如,称之为G:\)。我目前的解决方案(我已经实现了一个类似于:

的表)
__________________
|Setting | Value |
==================
Updating    1
UpdateBy   User1

那么让我给你一个背景。当应用程序运行时,有一个名为“update”的按钮,它从远程服务器更新本地表,以便我们可以应用过滤。现在,当两个人(user1,user2)启动应用程序,并且一个人单击更新时,updating字段设置为true,updateby设置为其名称。 因此用户编号2 尝试更新,它会检查updating字段是否为真,如果是,则它会向用户发送消息(对用户2,而不是用户1)。

它现在很漂亮,但问题是:让我们说user1正在更新,并关闭他的程序(或任务杀死它)或电源中断,然后应用程序关闭,updating字段设置为为真。现在无论是谁启动它,它们都无法更新,因为它的“已经更新

你们能想到解决这个问题的方法吗?也许是一种解决方法?

3 个答案:

答案 0 :(得分:2)

如果没有拆分数据库,请不要运行具有多个用户的Access应用程序。这会造成无穷无尽的麻烦。应将数据部分(后端)放在服务器上,并将代码和表单(前端)放在每个用户桌面上。

更多信息:http://support.microsoft.com/kb/162522

答案 1 :(得分:2)

阅读我关于你为何分裂的文章:

http://www.members.shaw.ca/AlbertKallal/Articles/split/index.htm

在上面,我不只是告诉你这样做,但我告诉你为什么要分手。

在用户互相绊倒方面,它可以帮到你很多。

答案 2 :(得分:1)

考虑不同的锁定策略。在“更新”按钮的单击事件中,您可以首先使用dbDenyWrite + dbDenyRead选项根据您的tblUpdateStatus(您编写UpdateBy的表)打开记录集。

Set rst = db.OpenRecordset("tblUpdateStatus", _
             dbOpenTable, dbDenyWrite + dbDenyRead)

然后对“更新”按钮执行其他操作。然后,关闭并释放记录集...它将释放tblUpdateStatus锁。

当用户无法打开记录集时捕获错误(因为另一个用户已将表锁定),给他们一条消息以便稍后尝试并退出click事件子例程。

使用这种方法,当user1锁定tblUpdateStatus但不正确地退出Access时,将释放她对tblUpdateStatus的锁定。您可能甚至不需要更新tblUpdateStatus,除非您想记录哪个用户已将其锁定。

有关在dbDenyWrite + dbDenyRead中使用记录集的更多详细信息,请参阅Create and Use Flexible AutoNumber Fields(来自Access Cookbook)。