如何从组合框选择中选择表值?

时间:2016-05-31 18:36:30

标签: vba ms-access combobox

我正在使用Access 2003数据库,并且我正在尝试使用2个组合框。我已经完善的第一个框,它是不同表格(部件类别)的下拉列表。选择该表后,我希望能够通过下拉框选择查看该类别中的部件号。从这里开始,我希望能够使用该部件号为该类别提取正确的报告,以便我可以为每个部件号打印报告。我确定我必须编写某种VBA,Query或Macro AfterUpdate()代码,但我不知道如何使用所选表填充第二个组合框部件号。

Click here for an image of my Menu layout

这是我的查询第一个显示我想要的表的框:

    SELECT Msysobjects.Name
    FROM Msysobjects
    WHERE (((Msysobjects.Name)  not Like "MSYS*" 
    And (Msysobjects.Name) not like "_*"
    And (Msysobjects.Name) not like "~*"
    ) AND ((Msysobjects.Type)=1))
   ORDER BY Msysobjects.Name;

我认为这是我在第二个框选择之后需要打印的内容:

    Private Sub partnumberselect_AfterUpdate()
    DoCmd.OpenTable Forms![_Datasheet Printing].Form.TagLabelSelection.Column(1), acViewNormal
    End Sub

提前感谢您,如果您有任何疑问,请与我们联系。

2 个答案:

答案 0 :(得分:2)

您正在尝试所谓的“级联组合框”,这意味着第二个框取决于第一个框的选择。

这是通过第二个组合框的控制源完成的。

你应该做的第一件事是编写一个返回第二个组合框的所有可能选项的查询,而不必过多关注根据第一个组合选择过滤它。一旦你返回正确的数据,你将在第二个框的控制源中添加一个WHERE子句,如下所示:

WHERE Msysobjects.Name Like Forms![_Datasheet Printing]!TagLabelSelection.Value

这是在您的表单上引用您的第一个组合框。因此,在第一个组合框中进行选择后,第二个组合框的基础控制源将具有返回适当选项的正确标准。

但是,您需要在第一个组合框上的AfterUpdate()事件中添加一些VBA。选择完成后,您需要第二个框来刷新控件源以填充正确的选择。代码很简单:

Forms![_Datasheet Printing]![MySecondComboboxName].Requery

答案 1 :(得分:0)

请参阅下面的示例。

Private Sub cboCountry_AfterUpdate()
    On Error Resume Next
    cboCity.RowSource = "Select tblAll.City " & _
        "FROM tblAll " & _
        "WHERE tblAll.Country = '" & cboCountry.Value & "' " & _
        "ORDER BY tblAll.City;"
End Sub

enter image description here

您可以在下面的链接中阅读有关此概念以及其他概念的所有内容。

http://www.fontstuff.com/access/acctut10.htm