2

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

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

具体错误说:自从您开始编辑此记录以来,该记录已被另一个用户更改

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

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

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

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

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

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

任何人都可以对这个问题有所了解吗?

谢谢。

4

3 回答 3

4

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

于 2012-08-02T07:07:10.797 回答
0

我遇到过同样的问题,

    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

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

于 2021-03-23T10:18:11.353 回答
0

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

于 2017-10-02T20:49:55.477 回答