我有一个Microsoft Access应用程序,其中主页面是绑定到数据库中主表的表单(保存公司信息)。这是SQL Server后端的链接表。数据库中有大约40000条记录和多个用户。
通常在没有任何过滤器的情况下打开表单。
有一个下拉列表可以找到一个特定的公司 - 然后重新打开带有where条件的表单。用户在完成与特定公司的合作后,往往会解开过滤按钮。
我发现当没有过滤器时,Access会在SQL Server表上取出共享页锁。当其他人尝试更新或将新记录插入公司表时,这可能会导致问题(他们会等待共享锁被释放)。只要发生任何过滤,Access就会删除页面锁定
我还发现,如果我使用表单底部的导航按钮转到最后一条记录,则会释放页面锁定。
无论如何我可以以编程方式导致访问释放此锁 - 我尝试转到on_ApplyFilter事件中的最后一条记录 - 但我认为(因为你可以取消它)这发生在删除过滤器之前,而不是之后。
答案 0 :(得分:0)
您可以创建查询并使用表单后面的查询。您需要做的就是从表中选择*,但添加一段代码:
sSQL = "SELECT * FROM MyTable with (NoLock);"
Me.RecordSource = sSQL
答案 1 :(得分:0)
我发现了如何使这项工作。我对On_ApplyFilter过早的猜测是正确的,但你可以使用计时器。
在on_ApplyFilter事件中,我只设置Me.TimerInterval = 100并在Form Load上执行相同的操作。
在计时器事件中我只是做
Me.TimerInterval = 0
DoCmd.GoToRecord , , acLast
DoCmd.GoToRecord , , acFirst
这解决了这个问题 - 似乎没有时间遍历40000记录并在完成后让SQL Server数据库免于锁定