【问题标题】:Checkbox per row in multi user access database多用户访问数据库中每行的复选框
【发布时间】:2017-01-24 09:47:31
【问题描述】:

我有以下情况:

我有一个多对多的关系。

例如 Employee 表、Course 表和它们之间的关系表。

现在我希望用户可以以对话框形式从课程表中选择他的课程。

这意味着对话框内我的连续表单的基础表是课程表。 我希望每一行都有一个复选框,指示是否选择了课程。 正如我所读到的,添加一个未绑定的复选框是不可能的,因为它们只是副本,并且单击选择会选择所有这些复选框。 解决方案是在基础表课程中添加一个是/否字段。

但是据我了解,这里有问题,因为我有几个用户同时使用数据库,如果我单击一个复选框,基础表将被更新,并且此更新将为所有用户选择值同时使用对话形式的,我不想要的。

所以我的问题是,是否有另一种解决方案可以在多用户访问数据库中为每行获取一个有效的复选框。 我可以想象有两种解决方案:

1) 基础表将是关系表,在这种情况下,员工和课程之间的所有可能组合都将与是/否字段一起保存。 (但从数据的角度来看,这将是非常可怕的)

2) 如果对复选框的更改不会直接写回数据库表,我可以在保存时丢弃它们并手动将关系记录插入关系表中。 (这可能吗?)

感谢任何解决方案的建议

【问题讨论】:

  • 在所有情况下,您都必须使用 VBA 完全管理它。有两种方法:如果您真的想要复选框,那么您需要使用 ADO 断开连接的记录集。如果您只选择数据表中的行的解决方案是可以的(所以没有复选框),您可以使用 DAO。但在这种情况下,您只能选择一行,或多行并发。我可以稍后按照您选择的解决方案为您提供完整的答案。
  • @thomasG 你是什么意思,只选择一行,还是几个并发行?复选框不是必需的。但是用户需要选择一个或多个行,然后我想在他按下保存按钮时将其保存到连接表中,所以我还需要一种方法来识别所选行
  • @Fionnuala 我有一个联结表,但最初它不会有员工/课程对的任何行。但我必须展示他可以选择的所有可能的课程。如上所述,如果我将所有可能的组合放入带有是/否字段的联结表中,那是可能的,但它会在数据库中添加很多不必要的数据,而且我每次添加新课程时都必须对其进行管理如果有人将员工或课程直接添加到数据库中,则可能导致数据库出错的新员工。

标签: ms-access


【解决方案1】:

我看到了两种好方法:

1) 这假设您的数据库在网络后端中拆分 + 每个用户都有一个本地前端。这是多用户的推荐设置。

前端有一个本地表,其中包含 Course_ID 和一个是/否列。
此本地表与 Course 表的连接是您的连续表单的记录源。

加载时,将课程 ID 复制到本地表中,并将现有关系设置为 True。

保存时,更新关系表。

2) 使用 ListView 控件而不是连续表单。它有内置的复选框。加载和保存是通过 VBA 循环完成的。

【讨论】:

  • 我选择了你的第一种方法,它似乎工作得很好。谢谢
【解决方案2】:

根据您的描述,我假设您的表单在其数据源中有一个 LEFT/RIGHT JOIN,如果您的关系表中不存在特定的课程/员工组合,则某些 ID 字段为空。我们称之为LinkID。那么你的复选框应该类似于=NOT ISNULL(LinkID)。虽然您将无法使用 OnClick 事件让用户以这种方式选中/取消选中,但您可以使用 onMouseDown 事件查看用户是否单击了复选框并采取相应措施。

这样您就不需要“所有组合”关系表、临时表和是/否字段。如果具有课程/员工组合的记录存在,则选中该框,如果不存在,则不选中。添加和删​​除课程是通过在关系表中添加和删除记录来完成的。

【讨论】:

    【解决方案3】:

    看看这个How to use unbound checkbox in a Continuous Subform - MS Access。绑定未绑定复选框的类。比列表框更好,因为您拥有一个具有所有优点(排序、过滤、编辑、追加)的表单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 2013-08-09
      • 1970-01-01
      • 2016-02-29
      相关资源
      最近更新 更多