我创建了一个数据库/应用程序,单击特定按钮时会在其中创建报告。刚才,两个人竟然同时按下了按钮,引起了各种不好。
有没有办法让一个按钮在被一个人点击后在多个实例中不可见?或者以某种方式锁定数据库,这样在第一个点击的人完成之前什么都做不了?
我有一个解决方案(基本上是一个停止报告创建的全局检查变量),但现在我想知道是否可以完成其他两个选项中的任何一个。
我创建了一个数据库/应用程序,单击特定按钮时会在其中创建报告。刚才,两个人竟然同时按下了按钮,引起了各种不好。
有没有办法让一个按钮在被一个人点击后在多个实例中不可见?或者以某种方式锁定数据库,这样在第一个点击的人完成之前什么都做不了?
我有一个解决方案(基本上是一个停止报告创建的全局检查变量),但现在我想知道是否可以完成其他两个选项中的任何一个。
在这里了解更多关于你的架构真的很有帮助。什么数据库?你用什么语言写过你的应用程序?并发阅读通常是大多数多用户数据库的一个重要且基本的特性。
借用 Daniel Cook 的一般概念,也许需要解释一下:不要让按钮直接运行报告。让它运行一个小子例程,首先检查一个特殊用途的表,在该表中,您表示报告“运行”,其中包含一条具有开始日期时间和结束日期时间的新记录。如果表中存在没有(空)结束日期的记录,则报告必须仍在运行,因此,不要开始报告,而是关闭按钮。否则,插入同一个表,然后开始运行报表。在该按钮上添加一个定期的、不太频繁的回调来执行相同的检查,你得到了一些接近的东西,但不是“实时的”,但应该在大多数架构中工作(不知道任何关于会话管理功能)。
这是我所做的:
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”字段包含检查变量。在“Else”之后是单击按钮时要运行的实际代码。
仅供参考,因为他们被问到: