Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 防止跨实例按下按钮_Vba_Ms Access 2007 - Fatal编程技术网

Vba 防止跨实例按下按钮

Vba 防止跨实例按下按钮,vba,ms-access-2007,Vba,Ms Access 2007,我创建了一个数据库/应用程序,在其中单击特定按钮时会创建一个报告。刚才,两个人在同一时间按下了按钮,造成了各种各样的不好 有没有一种方法可以使按钮在被一个人单击后在实例中不可见?或者通过某种方式锁定数据库,以便在第一个单击的人完成之前无法执行任何操作 我有一个解决方案(基本上是一个停止报表创建的全局检查变量),但现在我想知道是否可以完成其他两个选项中的任何一个。在这里了解更多关于您的体系结构的信息将非常有帮助。什么数据库?你用什么语言写申请表?并发读取通常是大多数多用户数据库的一个重要和基本特征

我创建了一个数据库/应用程序,在其中单击特定按钮时会创建一个报告。刚才,两个人在同一时间按下了按钮,造成了各种各样的不好

有没有一种方法可以使按钮在被一个人单击后在实例中不可见?或者通过某种方式锁定数据库,以便在第一个单击的人完成之前无法执行任何操作


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

在这里了解更多关于您的体系结构的信息将非常有帮助。什么数据库?你用什么语言写申请表?并发读取通常是大多数多用户数据库的一个重要和基本特征

支持Daniel Cook的一般概念,也许需要解释一下:不要让按钮直接运行报告。让它运行一个小的子例程,首先检查一个特殊用途的表,在这个表中,您用一个新记录表示“运行”,该记录有一个开始日期时间和一个结束日期时间。如果表中有一条记录没有(null)结束日期,则报告必须仍在运行,因此,不要开始报告,而是关闭按钮。否则,插入到同一个表中,然后开始运行报告。再加上对该按钮进行周期性的、不太频繁的回调,以执行相同的检查,您就得到了一些接近的东西,但不是“实时的”,但应该可以在大多数体系结构中工作(对会话管理功能一无所知)。

以下是我所做的:

    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电子表格中。

看起来这是唯一的解决方案,它有效,但似乎不雅观。我不断发现,我解决知识匮乏的方法就是实际的解决方法…

如果使用全局检查变量,您的意思是更新网络表中的值并每次检查它。。。我相信这是你三种方法中唯一有效的。这份报告真的很复杂吗?如果您只读取数据,这通常是报告的工作方式,那么应该没有问题。介意与我们共享打开报表的代码和/或生成报表的代码吗?如果您有多个用户,并且您的数据库未拆分,则报表将是您最不需要解决的问题。标记提供了这些数据:数据库是Access,语言是VBA。你的建议就是我所做的,但我想知道是否有其他方法可以解决这个问题。不好的东西=不止一次地付钱给人,或者根本不付钱,或者用错误的帐户。我确实有一个清理坏锁的方法。这仍然取决于用户对问题的识别——我的编码还没有那么优雅/先进,我还不能弄清楚如何自动完成。本质上,当用户标识一个坏锁时,他们单击一个按钮来重置表中的check变量。