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

Posted

技术标签:

【中文标题】如何从组合框选择中选择表值?【英文标题】:How to select table values from combobox selection? 【发布时间】:2016-05-31 18:36:29 【问题描述】:

我正在使用 Access 2003 数据库并尝试使用 2 个组合框。我已经完善的第一个框,它是不同表格(零件类别)的下拉列表。选择该表后,我希望能够通过下拉框选择查看该类别中的部件号。从这里我希望能够为该类别提取正确的报告,其中包含该零件号,以便我可以为每个零件号打印一份报告。我确定我必须编写某种 VBA、查询或宏 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

提前感谢您,如果您有任何问题,请告诉我。

【问题讨论】:

【参考方案1】:

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

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

您应该做的第一件事是编写一个返回第二个组合框的所有可能选项的查询,而不必太在意根据第一个组合选择对其进行过滤。让它返回正确的数据后,您将在第二个框的控制源中添加一个 WHERE 子句,类似于:

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

这是引用表单上的第一个组合框。因此,在第一个组合框中进行选择后,第二个组合框的底层控制源将具有适当的条件来返回适当的选项。

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

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

【讨论】:

这很有道理,谢谢!我对 VB 和 Access 完全陌生,因此编写查询以返回组合框的所有可能选项给我带来了麻烦。如果我这样做: 从 COM(其中一个表)中选择 CATALOG 我会从 COM 表中得到我想要的结果。问题是从另外约 20 个表中提取目录列。 @ChristinaDocenko 听起来您的表格可能是非规范化的。你有没有组织表格?无论哪种方式,在进一步开发之前,请先查看数据规范化并评估您的结构是否正确。非规范化表使查询变得不必要地复杂,在某些情况下,甚至无法构建。 @ChristinaDocenko 从多个表中提取目录号是不必要的复杂。如果您需要规范化方面的帮助,请随时提出一个新问题。分手建议:看看这 20 张表,它们或多或少都有相同的列?如果是这样,唯一的区别是表名吗?表名所代表的类别能否移动到组合表的新列中? IE。 “螺丝刀”“钻头”“锯子”作为单独的表格可以与“类别”字段组合,将每一行指定为螺丝刀、钻头或锯子。 正是如此。理想情况下,我会制作一个包含所有类别标题及其信息的主表,但是,数据是通过 Autocad Electrical 添加的,并且由于某种原因自动将数据分离到单独的表中。不过,我可以使用附加查询将这些新条目添加到主表中。我可能会这样做,谢谢!【参考方案2】:

请看下面的例子。

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

您可以在下面的链接中阅读有关此概念和其他概念的所有信息。

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

【讨论】:

谢谢!!该链接中的示例 1 非常完美,我刚刚输入了所有案例

以上是关于如何从组合框选择中选择表值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在访问中使用 VB 从选择查询中填充组合框?

如何使用组合框根据另一个组合框的值从不同的表中选择数据

从组合框中选择项目时,如何从数据库中获取 ID 值?

当用户从 MS Access 的组合框中选择“其他”时,如何显示输入表单?

从组合框中选择项目时,从 xml 文件中获取数据到文本框。如何做到这一点?

组合框选择加载上一个选择