【问题标题】:How to update a record based on a combo box determined by a combo box?如何根据组合框确定的组合框更新记录?
【发布时间】:2020-07-05 15:29:45
【问题描述】:

我有tbl_1:

+-------+---------+
| fld_A |  fld_B  |
+-------+---------+
|     1 |         |
|     2 |         |
|     3 | str_3   |
|     4 | str_4   |
|     5 | str_5   |
+-------+---------+

还有tbl_2:

+-------+---------+
| fld_C |  fld_D  |
+-------+---------+
|     1 | str_1_X |
|     1 | str_1_Y |
|     2 | str_2_X |
|     2 | str_2_Y |
|     3 | str_3_X |
|     3 | str_3_Y |
+-------+---------+

我想使用带有两个组合框的表单 (frm_1) 使用来自 tbl_2 的数据更新 tbl_1cbo_1cbo_2

cbo_1 的控制源为fld_A,行源如下:

SELECT tbl_1.fld_A
FROM tbl_1
WHERE (((tbl_1.fld_B) Is Null));

Row Source 工作正常并显示12。 Bound 列是 1。

cbo_2 的控制源为fld_B,行源如下:

SELECT tbl_2.fld_D, tbl_2.fld_C
FROM tbl_2
WHERE (((tbl_2.fld_C)=[Forms]![frm_1].[cbo_1]));

行源工作正常,例如在cbo_1 中选择1 时显示str_1_Xstr_1_Y。 Bound 列是 1。

我还有一些 VBA 来确保 cbo_2 更新 cbo_1 的更改:

Private Sub cbo_1_Change()

cbo_2.Value = Null
cbo_2.Requery

End Sub

这也很好用。

我的问题是,当我从 cbo_1 中选择一条记录,然后从 cbo_2 中选择一条记录时,fld_B 不会更新。

【问题讨论】:

    标签: ms-access


    【解决方案1】:

    选项:

    1. 将表单绑定到 tbl_1,cbo_1 为 UNBOUND(无 ControlSource)并用作 AfterUpdate 事件中代码的条件以应用过滤器或移动到记录,cbo_2 将 ControlSource 设置为 fld_B 以保存所选值

    2. 表单和两个组合框都是 UNBOUND,组合框选择用于 UPDATE 操作 SQL
      CurrentDb.Execute "UPDATE tbl_1 SET fld_B='" & Me.cbo_2 & "' WHERE fld_A=" & Me.cbo_1

    【讨论】:

    • 一如既往地感谢@June7。第一个选项似乎不起作用 - 我认为唯一需要的更改是取消绑定 cbo_1。 frm_1 已绑定到 tbl_1 并且 cbo_2 已将控制源设置为 fld_B。选项 2 就像一个魅力:-)
    • 选项 1 需要代码 - 应用过滤器或移动到记录。甚至可以使用组合框构建向导来生成代码。如果答案解决了问题,请标记为已接受。点赞也不错。
    猜你喜欢
    • 1970-01-01
    • 2011-03-25
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    • 2015-09-30
    相关资源
    最近更新 更多