【问题标题】:run-time error '3197'. MS Access 2010 and SQL Server 2008R2运行时错误“3197”。 MS Access 2010 和 SQL Server 2008R2
【发布时间】:2012-07-30 00:45:04
【问题描述】:

我有一个用 MS Access 2007-2010 编写的应用程序,后端是一个 SQL 数据库。

构建新数据库后,当我在 Access 报告中查看 SQL 记录时,尝试编辑或输入新的输入结果时出现运行时错误 3197。

具体错误说: 自您开始编辑后,该记录已被其他用户更改

然后我有复制到剪贴板和删除更改选项,而保存记录是灰色的。 点击 Drop changes 会报错:

“运行时错误‘3197’ Microsoft Access 数据库引擎停止了该进程,因为您和其他用户正试图同时更改相同的数据。”

然后我查看 SQL 并使用 EXEC sp_who2 'Active' 查询数据库,我可以看到我用于 SQL 的用户名是 RUNNABLE 而 Access 应用程序使用的用户(在 Access VBA 中编码)被暂停(它被挂起的命令是 SELECT)。

我有其他数据库以相同的方式构建并且可以正常工作。我在使用 Access 运行时检查了工作数据库上的 sp_who2,并且因“有问题”数据库而被暂停的用户正在使用这个数据库。

我已经检查了两个数据库的权限,并检查了安全中用户的权限--> 登录,但没有看到任何我可以标记为问题的内容(也许其他人可以?)。

不知道为什么会发生这种情况以及为什么数据库被 SQL 用户锁定并且不允许 Access 用户更新相关记录。

谁能解释一下这个问题?

谢谢。

【问题讨论】:

  • 您是否对 MS Access 数据库进行了压缩、修复和反编译?您是否在 SQL Server 中使用任何“不寻常”的日期格式?您说其他 Access 数据库还可以,它们是否可以链接到导致问题的相同表?您对新数据库和链接表有疑问吗?
  • 新数据库与其他数据库具有相同的结构。我更改的唯一字段是几个 varchars,我将它们放大以适合所有文本。 “不寻常的日期格式”是什么意思?其他数据库使用相同的日期格式没有问题。当我在 Access 中选中一个对应于 SQL Server 中的位数据类型的框时,会出现错误消息(从我目前测试的结果来看)。起初,该位字段为 NULL,但即使我用 0 填充此字段,错误仍然存​​在。
  • 谢谢,我已将所有位数据类型更改为 smallint 并且有效。

标签: ms-access-2010 user-permissions sql-server-2008r2-express


【解决方案1】:

我遇到了同样的问题,

    sql2 = "Select * from voeding where id = " & ID_Voeding_Site.Value & ""
    Set rst2 = bbase.OpenRecordset(sql2)
        rst2.Edit
        rst2.Fields("verwerkt").Value = 1
        rst2.Fields("printdatum").Value = Date
        rst2.Update
        rst2.Close

卡在 .update 上。我把它改成:

    sql2 = "Select Verwerkt, Printdatum from voeding where id = " & ID_Voeding_Site.Value & ""
    Set rst2 = bbase.OpenRecordset(sql2)
        rst2.Edit
        rst2.Fields("verwerkt").Value = 1
        rst2.Fields("printdatum").Value = Date
        rst2.Update
        rst2.Close

没有更多的麻烦出现。希望这对其他人有所帮助。

【讨论】:

    【解决方案2】:

    按照建议,我将具有位数据类型的字段中的数据从 null 更新为 0,还将数据类型更改为 int。这解决了问题。

    【讨论】:

      【解决方案3】:

      正如 Remou 评论的那样,将所有位数据类型更改为 smallint 并填充 0 ,其中 Null 成功了。我不需要将 1 更改为 -1,因为我的字段处于未勾选 (=0) 的初始状态。

      【讨论】:

      • 谢谢,我遇到了类似的问题 - 我的位字段为 Null(不是 0),这对我造成了同样的错误。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多