【问题标题】:Populate Field based on another Combo Box基于另一个组合框填充字段
【发布时间】:2012-11-24 21:53:18
【问题描述】:

我有一个包含三个组合框的表单 (MS-Access 2003)。第 1(类别)、第 2(CatDetail)、第 3(NbrValue)。我从第一个更新事件后填充第二个没有问题。当我尝试为第 2 次运行类似的更新事件以更新第 3 次时,我的问题就出现了。这是我的代码。

表 1(类别)

CategoryID    Category Name
1             Vacation
2             DH

第一个组合框(类别)SQL

SELECT Category.CategoryID, Category.[Category Name]
FROM Category
ORDER BY Category.[Category Name];

更新第一个组合框(类别)的 VBA 后

Option Compare Database
Private Sub Category_AfterUpdate()
Me.CatDetail = Null
Me.CatDetail.Requery
Me.CatDetail = Me.CatDetail.ItemData(0)
End Sub

表 2(CatDetail)

CatDetail ID    CatDetail         Category
1               Vac Day Used      Vacation
2               Partial Vac Day   Vacation
3               DH Gain           DH
4               DH Used           DH

第二个组合框 SQL (CatDetail)

SELECT CatDetail.[CatDetail ID], CatDetail.[CatDetail Name], CatDetail.CategoryID
FROM CatDetail
WHERE (((CatDetail.CategoryID)=[Forms]![Combo Form]![Category]));

为第二个组合框 (CatDetail) 更新 VBA 后

Private Sub CatDetail_AfterUpdate()
Me.NbrValue = Null
Me.NbrValue.Requery
Me.NbrValue = Me.NbrValue.ItemData(0)
End Sub

这部分效果很好。我迷失了下一组以更新第三个组合框。

表 3(值)

ValueID     Value    CatDetail Name
1           -1       Vac Day Used
2           -0.5     Partial Vac Day
3           1        DH Gain
4           -1       DH Used

第三个组合框 (NbrValue) SQL

SELECT Value.ValueID, Value.Value, Value.[CatDetail Name]
FROM [Value]
WHERE (((Value.[CatDetail Name])=[Forms]![Combo Form]![CatDetail]));

总而言之,我可以选择我的第一个组合框值。在该选择之后,第二个组合框会更新所有相应的值。问题在于第二个组合框上的更新后事件,因为我的第三个组合框返回空白。

【问题讨论】:

  • 第三个组合框的 SQL 是什么?
  • 对不起... 第三个组合框 SQL... >SELECT Value.ValueID, Value.Value, Value.[CatDetail Name] >FROM [Value] >WHERE (((Value.[CatDetail Name] ])=[Forms]![Combo Form]![CatDetail Name]));
  • 更新第二个组合框后,您是否从第三个组合框的 SQL 查询中获得结果?
  • 在即时窗口中(设置CatDetail的值后)输入?[Forms]![Combo Form]![CatDetail]
  • 我已经查看了即时窗口,没有任何事件显示。

标签: vba ms-access


【解决方案1】:

我一直这样做。在 AfterUpdate() 中设置依赖组合框的行源。

Sub Combo1_AfterUpdate()

 comboBox2.RowSource = "SELECT .... WHERE FIELD = " & Combo1.Value

 comboBox3.RowSource = ""  ' Reset the third combo until after the 2nd is set.

End Sub
Sub Combo2_AfterUpdate()

 comboBox3.RowSource = "SELECT .... WHERE FIELD = " & Combo2.Value

End Sub

如果查询实际上返回了某些内容,这将起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 2014-04-13
    相关资源
    最近更新 更多