以非常简单的 Access 表单与子表单编写冲突

Posted

技术标签:

【中文标题】以非常简单的 Access 表单与子表单编写冲突【英文标题】:Write conflict in very simple Access form with subform 【发布时间】:2011-09-30 15:20:47 【问题描述】:

这个问题难倒我,因为我正在做的事情看起来很简单。

我有一个未绑定的表单 (frmAdmin),其中包含一个列表框 (lstUsers) 和一个包含列表框 (lstUsergroups) 的子表单。

lstUsers 未绑定并显示用户名列表(行源是用户表与users.fk__ContactID = contacts.pk__ContactID 上的联系人表左连接,因此我可以显示要显示的名称)

子表单绑定到用户表并具有过滤器pk__UserID = Forms!frmAdmin!lstUsers

lstUsergroups 显示绑定到用户表中fk__Usergroup 字段的用户组列表。

唯一涉及的 VBA 是 lstUsers 上的单击事件,它重新查询子表单。

当我从lstUsers 中选择一个用户时,子表单列表框显示用户的用户组已选择,但如果我选择不同的用户组,然后选择不同的用户或关闭表单,我会收到写冲突“此记录已由另一个用户”等。

这看起来很简单!什么可能导致写冲突?没有打开其他表单,用户表是一个链接的 SQL Server 表,但没有触发器应该写入任何内容。它只是一个表单、一个子表单和一个点击事件。

【问题讨论】:

你为什么使用列表框而不是表单/子表单?我永远不会用子表单上的列表框来模拟您所描述的内容(尽管肯定有可能是组合框)。 我正在使用子表单,这对于我希望 UI 的工作方式很有意义。应该有一个用户列表和一个用户组列表。当我选择一个用户时,他们的用户组应该被选中,然后我应该能够通过选择用户组列表中的另一个项目来更改他们的用户组。据我所知,这不是控件类型的问题,但如果我错了,请告诉我。 表单和子表单非常适合列表,其中的数据是可编辑的,而列表框则不然。这完全取决于您想要做什么,但是作为父级的连续表单(可能带有用于导航的列表框)和数据表子表单(没有列表框,但用于选择用户的组合框)将是正常的 UI,似乎我。 【参考方案1】:

确保 SQL 表具有主键,然后更新您的链接表。如果这似乎无法解决问题,请尝试将时间戳字段添加到发生写入冲突的 SQL 表中,然后再次更新链接表。这一直发生在我身上。 Access 有时对它实际用作唯一标识符的内容似乎很挑剔。

【讨论】:

时间戳做到了。我应该想到这样做。我在另一个表中遇到了类似的问题,添加时间戳解决了它。谢谢!后续问题:为什么时间戳列的存在解决了这个问题,即使每条记录都是空白的? 它实际上不是空白的。它是数据库服务器专门用于记录版本控制的数据类型(至少在 MS SQL Server 上)。 Access 知道如何使用它,所以幸运的是,通常需要在添加字段后更新链接表。 太棒了,太棒了……我以前从未听说过这个,但是当我尝试使用更多规范化链接表时它救了我。我认为当 MasterChild 字段与正在编辑的字段不一致时,Access 会感到困惑——单独的、匹配的“查找”。但是只需将时间戳放入已编辑的表格中就可以了!!!

以上是关于以非常简单的 Access 表单与子表单编写冲突的主要内容,如果未能解决你的问题,请参考以下文章

Ms Access,双击列表框元素以更新表单

将 MS-Access 表单结果导出到 Excel?

在 Access VBA 中禁止写入冲突消息

Access 2007 表单错误:您尝试提交或回滚事务

如何使用未绑定访问表单解决写入冲突

在 Access 2010 中查看时,Access 2007 表单中的幻影框