【问题标题】:INSERT INTO table from form with checkboxes从带有复选框的表单中插入表格
【发布时间】:2019-03-12 14:11:24
【问题描述】:

我想使用一个表单将多个条目插入到一个表中。

期望的结果:

DESTINATION_TABLE
DATE       | PLACE | THEME | PARTICIPANT
dd.mm.yyyy   A       X       1
dd.mm.yyyy   A       X       2
dd.mm.yyyy   B       Y       3

PLACE 和 PARTICIPANT 将从其他表格中包含的值中选择,而 DATE 和 THEME 则使用文本框输入。对于 DATE、PLACE 和 THEME,一次只能将一个值插入到表中,但我希望能够插入多个 PARTICIPANT,并为每个 PARTICIPANT 选择一个新行。

通过表单为 DATE、PLACE 和 THEME 添加新条目(使用 CurrentDb.Execute "INSERT INTO...)。

如何创建一个表单,让我从从 PLACE 中的值过滤的子表单(最好带有复选框)中选择 PARTICIPANT,并在 DESTINATION_TABLE 为每个选择的 PARTICIPANT 添加一个条目? p>

【问题讨论】:

  • 这是一个相当广泛的问题;你能把范围缩小一点吗?
  • @CaiusJard 很抱歉,但我不知道如何将此问题分解为子问题。你有什么建议吗?

标签: sql vba ms-access


【解决方案1】:

使用当前设置的一种简单方法是:

  1. Yes/No 字段添加到您的参与者表中,默认为No。我们将此字段称为Selected
  2. 将您的子表单绑定到参与者表,用户将能够从此视图中检查每个参与者(使用Selected 字段)。

  3. 从您用来保存数据的任何事件(例如按钮单击)中,根据参与者表(SELECT * FROM PARTICIPANT WHERE Selected = True)中选定的参与者创建一个记录集(rs)。循环遍历每条记录在记录集中(rs)并执行您的代码CurrentDb.Execute "INSERT INTO...),从记录集中获取参与者(rs("Participant"))的值。

  4. 循环结束后,更新参与者表,将Selected 字段设置为NoCurrentDb.Execute "UPDATE PARTICIPANT SET Selected = False WHERE Selected = True"
  5. 如果需要,刷新/重新查询您的子表单数据

用你的替换上面的对象名称。

【讨论】:

  • 谢谢@jbud,我会尽快尝试。创建这个循环对我来说将是一个很好的学习机会!
  • 快速更新:您的解决方案中的步骤 1) 和 2) 运行良好,我能够得到我想要的表格。但是,我在研究记录集时迷路了(我对 VBA 一点也不熟悉),所以我使用了另一种不太优雅的方法:我创建了一个空的临时表,我使用 DoCmd.RunSQL "UPDATE tmpTable RIGHT JOIN Participant ... WHERE Participant.Checkbox = True”,然后是“INSERT INTO Tabl SELECT [...] FROM tmpTable”。我很清楚这是一个真正可怕的解决方案,但它确实有效......再次感谢@jbud 为我指明了正确的方向!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多