【问题标题】:Access SQL Server Insert blocked by Select访问 SQL Server 插入被 Select 阻止
【发布时间】:2016-02-02 14:38:31
【问题描述】:

好的,我们有一个多用户(25 个用户)Access 2013 FE 和一个 SQL Server 2012 BE。直到昨天,整个系统都运行良好,现在完全停止了。

  • 如果用户 A 通过从 TABLE Z 读取的直接选择查询打开了一条记录,那么如果用户 B 尝试在 TABLE Z 上执行插入操作,他们会收到超时消息。当我转到 SQL Server 并运行 SP_WH02 时,它显示用户 B 被用户 A 阻止。当我随后调查阻止用户 B 的命令时,它只是一个简单的 SELECT 语句。

有人知道为什么会这样吗?

用户 A 打开的表单有 Record Locks = No Locks 和 Recordset Type = Dynaset

记录源是一个SELECT,检索两个字段,其中关键字段是基于另一个值的参数。

但是,这个系统几个月来没有任何变化,所以我很困惑为什么会发生这种情况。

感谢您的帮助。

【问题讨论】:

  • 检查访问:文件->选项->客户端设置->高级->默认记录锁定。应该是“无锁”。
  • 用户A的表格是连续表格,有很多记录吗?如果是,当 A 走到列表末尾时它是否有效(所有记录都加载到 Access 中并显示记录号)?
  • 默认记录锁定 = 无锁定。是否勾选了使用记录级锁定打开数据库?
  • 它不是连续的no,只是一个单一的形式。
  • 更新:当任何用户对表 Z 运行选择时,我们无法再执行任何插入操作

标签: sql sql-server ms-access ms-access-2013


【解决方案1】:

好的,我们解决了。如果其他人有同样的问题:我们将 9400 条记录归档到一个新表中,现在我们可以再次插入。它为我们赢得了时间,因此我将进一步规范化表 Z 并根据标准自动存档记录。

【讨论】:

    【解决方案2】:

    可能与MS Access holds locks on table rows indefinitely中的问题相同或相似

    Access 仅获取大记录源的前 x 行,使表处于 ASYNC_NETWORK_IO 等待状态,即锁定。

    可能的解决方案是:

    • 没有选择所有记录的表单或查询。滚动浏览超过 20k 条记录通常没有太大意义。
    • 强制访问获取所有记录,以释放锁定。您可以使用Me.RecordsetClone.MoveLast 来执行此操作,例如在Form_Load()。仅适用于快速网络连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 2019-10-04
      • 2021-04-15
      相关资源
      最近更新 更多