1

我有一个 Microsoft Access 应用程序,其中的主页是绑定到数据库中主表的表单(保存公司信息)。这是到 SQL Server 后端的链接表。数据库中有大约 40000 条记录和多个用户。

通常打开表单时没有任何过滤器。

有一个下拉列表可以查找特定公司 - 然后使用 where 条件重新打开表单。用户在完成与特定公司的合作后往往会取消切换过滤器按钮。

我发现当没有过滤器时,Access 会在 SQL Server 表上取出一个共享页面锁。当其他人试图更新或插入新记录到公司表中时,这可能会导致问题(他们在等待共享锁被释放时超时)。Access 会在进行任何过滤后立即删除页面锁定

我还发现,如果我使用表单底部的导航按钮转到最后一条记录,页面锁定就会被释放。

无论如何,我是否可以通过编程方式导致访问以释放此锁定 - 我尝试转到 on_ApplyFilter 事件中的最后一条记录 - 但我假设(因为你可以取消它)这发生在过滤器被删除之前,而不是之后。

4

2 回答 2

0

我发现了如何使这项工作。我对 On_ApplyFilter 过早的猜测是正确的,但您可以使用计时器。

在 on_ApplyFilter 事件中,我只设置 Me.TimerInterval = 100 并在 Form Load 上执行相同的操作。

我刚刚做的计时器事件

Me.TimerInterval = 0
DoCmd.GoToRecord , , acLast
DoCmd.GoToRecord , , acFirst

这解决了问题 - 似乎不需要任何时间来遍历 40000 条记录,并在 SQL Server 数据库完成时保持无锁

于 2013-10-24T13:57:48.230 回答
0

您可以创建一个查询并使用表单后面的查询。您需要做的就是从表中选择 *,但添加一段代码:

sSQL = "SELECT * FROM MyTable with (NoLock);"

Me.RecordSource = sSQL
于 2013-10-23T12:48:40.347 回答