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

Posted

技术标签:

【中文标题】如何使用组合框根据另一个组合框的值从不同的表中选择数据【英文标题】:How to use a Combo Box to select data from different tables depending on the value of another Combo Box 【发布时间】:2017-11-09 11:44:34 【问题描述】:

我有一个简单的 MS Access 数据库,其中显示了有关收到的投诉的详细信息。我有 4 个表,如下所示:

第一个表称为“tbl_Data”,它显示一般信息,如投诉详细信息等,

第二个表称为“tbl_Tools”,其中列出了所有工具编号和描述,

第三张表称为“tbl_Products”,其中列出了所有产品编号和描述,

第 4 个表称为“tbl_Material”,其中列出了所有材料编号和描述。

我想在 frm_Complaints 中有 2 个组合框,它根据第一个组合框中的数据从正确的表中获取 PartNumber。

例如:第一个组合框将根据投诉所指的内容列出“工具”、“产品”和“材料”,如果我选择“工具”,第二个组合框将在仅限“tbl_Tools”。我尝试过联合查询来合并所有 3 个表,但是无法编辑数据。 VBA中是否有一种简单的方法可以使第二个组合框仅从正确的表中查找零件号,然后有一个显示相应描述的第三个字段? 见截图链接:

【问题讨论】:

请将您的问题格式化为多个段落,提供示例数据、组合框上的任何相关代码(行源等)和示例输出。以您目前的格式,很难理解,甚至更难回答您的问题。 您可以使用ComboBox_Change事件获取第一个组合框的值并设置第二个组合框的列表。 但是您究竟如何获得第二个组合以从正确的表中选择数据?我似乎无法编写正确的选择代码,或者需要任何类型的 VBA 代码。 ComboBox1_Change事件中,获取ComboBox1.ValueComboBox1.ListIndex来确定你想要哪个表。然后将对应的数组分配给ComboBox2.List的第二个组合框 【参考方案1】:

正如我的评论,您可以通过ComboBox1_Change 事件设置第二个 ComboBox.List 触发器。

Private Sub ComboBox1_Change()
    Select Case ComboBox1.ListIndex
        Case 0
            ComboBox2.List = ArrayTool
        Case 1
            ComboBox2.List = ArrayProducts
        Case 2
            ComboBox2.List = ArrayMaterial
    End Select
End Sub

或者是这样的:

Private Sub ComboBox1_Change()
    Select Case ComboBox1.Value
        Case "Tool"
            ComboBox2.List = ArrayTool
        Case "Products"
            ComboBox2.List = ArrayProducts
        Case "Material"
            ComboBox2.List = ArrayMaterial
    End Select
End Sub

【讨论】:

您的代码看起来很有希望,但我该如何使用 ArrayTool? ComboBox2 如何查找 tbl_Tools 的第二个字段以显示工具零件号列表? ArrayTool 是您所说的工具零件编号列表。您必须自己构建它,因为我对您的表格数据一无所知。 但是如果我有一个很长的工具编号列表(大约 40,000 个数字),使用数组是否可行?我可以不直接链接到 [tbl_Tools].[PartNo] 为什么不试试看呢?您可以通过Range.Value 分配列表。【参考方案2】:

您绝对可以使用上述方法更改您选择的表格 - 不只是选择不同的数组 - 在 VBA 中使用 select case,并将 SQL 放入 VBA,就像在 Access 中编写它一样,但在语音标记中。在下面,基于文本框(Me.Poltxt)(不是组合框)值的变化,案例发生了变化,并且此代码位于由组合更新触发的更长的子例程中这里没有提到盒子 - 但原理是一样的。 元素 1 和元素 2 是 2 个不同的表。

Select Case Me.Poltxt.Value

Case "Pol1"
Me.Polcbo.RowSource = "SELECT [Elements 1].[ElemName] FROM [Elements 
1] ORDER BY [Elements 1].[ElemName];"


Case "Pol2"
Me.Polcbo.RowSource = "SELECT [Elements 2].[ElemName] FROM [Elements 2] ORDER 
BY [Elements 2].[ElemName];"                     

Case Else: Me.Polcbo.Value = "N/A"

End Select

【讨论】:

以上是关于如何使用组合框根据另一个组合框的值从不同的表中选择数据的主要内容,如果未能解决你的问题,请参考以下文章

如何按常用的组合框排序?

访问 2010 组合框 - 更新后无法 DLookup 结果

根据组合框选择 C# 更改组合框值

根据组合框选择更改文本框值

如何在 MS Access 2010 中使用 VBA 选择多值组合框的值?

改变一个组合框的值会导致另一个组合框的值改变