防止跨实例按下按钮

时间:2012-09-17 21:57:13

标签: vba ms-access-2007

我创建了一个数据库/应用程序,其中单击特定按钮时会创建报告。刚才,有两个人设法在同一时间点击了按钮,这导致各种不好的事情。

有没有办法让一个按钮在被一个人点击后不可见?或者某种方式来锁定数据库,以便在完成点击的人完成之前无法完成任何工作?

我有一个解决方案(基本上是一个停止创建报告的全局检查变量),但现在我想知道是否可以完成其他两个选项中的任何一个。

2 个答案:

答案 0 :(得分:1)

在这里了解更多关于您的架构真的很有帮助。什么数据库?你用什么语言写了你的申请?并发读取通常是大多数多用户数据库的重要和基本功能。

借用丹尼尔库克的一般概念,或许可以解释一下:没有按钮直接运行报告。让它运行一个小子程序,首先检查一个特殊目的表,在那里你用一个具有开始日期时间和结束日期时间的新记录表示报告“运行”。如果表中没有(空)结束日期的记录,则报表仍必须正在运行,因此,请勿开始报表,而是关闭按钮。否则,插入同一个表,然后开始运行报告。再添加一个定期的,不太频繁的回调来执行相同的检查,你有一些接近但不是“实时”的东西,但应该适用于大多数架构(不知道任何关于会话管理功能)。

答案 1 :(得分:1)

这就是我的所作所为:

    If DLookup("PayLock", "table", "pkID=1") Then 'it's locked - exit
        MsgBox "Someone else has already started the pay process.", vbOKOnly
        Exit Sub
    Else
        blah blah blah......

表中的“PayLock”字段包含check变量。在“Else”之后出现单击按钮时要运行的实际代码。

仅供参考,因为他们被问到:

  • 是拆分数据库
  • 有多个用户
  • 是的,报告只是读取数据并将其导出到Excel电子表格中。
看起来这是唯一可行的解​​决方案,但似乎不够优雅。我一直在发现,我解决缺乏知识的方式是实际的方法......