如何使用 Dlookup for Multiple Criteria 创建动态组合框

Posted

技术标签:

【中文标题】如何使用 Dlookup for Multiple Criteria 创建动态组合框【英文标题】:How do i use Dlookup for Multiple Criteria to create a dynamic Combobox 【发布时间】:2020-12-22 13:14:19 【问题描述】:

我有两个组合框来自:txtKategorie 和 txtTyp。 第一个 Combobox (txtKategorie) 的值已修复! 我希望第二个 Combobox (txtTyp) 的值根据用户在第一个中选择的内容而改变。 如果用户选择“Datalogger”,则第二个组合框应该只包含“Base Layer Classic”和“Base Layer Plus”,如图所示。 “加速度计”也是如此。

我已将代码放入第一个 Combobox 的 AfterUpdate 事件中:

 If txtKategorie.Value = "Datalogger" And txtTyp.ListCount = 0 Then   
    i = 1
    Do While txtTyp.ListCount < DCount("ID", "tblNomenklatur", "[Kat] = 'K'")
    txtTyp.AddItem DLookup("[Typ]", "tblNomenklatur", "[ID] =" & i And "[Kat] = 'K'")
    'And "[Kat] = 'K'"
    i = i + 1
    Loop

当表单打开时,只有第一个组合框“txtKategorie”具有值。当用户选择 Datalogger 时,代码检查表中有多少记录具有 [Kat] = "K" 以定义 Do While 语句将运行多长时间。然后“txtTyp.AddItem”-Statement 应该将“Base Layer Classic”和“Base Layer Plus”添加到“txtTyp”组合框中。但不幸的是,该代码不起作用。包含两个标准的 Dlookup-Statement 存在问题。如果我删除了两个标准中的任何一个,则代码可以正常工作,但显然会为第二个 Combobox 提供错误的结果。如果我这样离开它,第二个 Combobox 保持为空。 有人知道我做错了什么吗?

【问题讨论】:

你不需要循环。您可以通过简单的方式实现它。对于txtTyp 组合框,创建对Row Source 的查询,并为您的第一个组合框的Kategorie 列设置条件,例如Forms![FormName]![txtKategorie]。在After Update 事件中,只需重新查询第二个组合框。 我不确定您的意思:为您的第一个组合框的类别列设置条件,例如 Forms![FormName]![txtKategorie]。你能解释一下吗?谢谢。 看我的回答。您必须将 Form1Table1 名称更改为您的数据库 FormTable 名称。 非常感谢您的详细回答,我会尝试并回复您! 【参考方案1】:

您可以通过以下代码轻松完成。用您的表名更改表名。

Private Sub txtKategorie_AfterUpdate()
    Me.txtTyp.RowSource = "SELECT DISTINCT Table1.Typ FROM Table1 WHERE Table1.Kategorie='" & Me.txtKategorie & "'"
    Me.txtTyp.Requery
End Sub

或者您可以从行源查询生成器中以图形方式执行此操作。以下是步骤。

    组合框txtKategorie 已修复。好的! 对于第二个组合框txtTyp,请按照以下步骤操作。 选择组合框txtTyp。从属性窗口中选择Row Source,然后单击查询生成器... 小三点。查看屏幕截图。 在查询构建器窗口中,从您的数据表(如屏幕截图)构建查询,并将Kategorie 列的条件设置为[Forms]![Form1]![txtKategorie] 保存并关闭查询构建器窗口。

现在对于 After Update 事件中的 Combobox txtKategorie,请在下面的行中写入以重新查询 txtTyp。你完成了!

Private Sub txtKategorie_AfterUpdate()
    Me.txtTyp.Requery
End Sub

【讨论】:

您的天才,查询生成器解决方案立即为我工作。我经常使用 VBA 来解决问题,因为我对访问查询生成器了解不多。您的解决方案表明您并不总是需要 VBA 或很少。非常感谢! 也许还有一个问题:这部分 [Forms]![Form1]![txtKategorie] 必须查看 Comboboxes 是否位于子表单上? 然后使用SubForm 名称而不是父表单,如[Forms]![subFrm]![txtKategorie] 我试过了,但它只有在我只打开 subfrom 时才有效。当我在主窗体上打开子窗体时单击 txtTyp 组合框时,它显示输入参数值。

以上是关于如何使用 Dlookup for Multiple Criteria 创建动态组合框的主要内容,如果未能解决你的问题,请参考以下文章

如何在访问表单上的文本框的验证规则中使用 DLookup

如何使 Dlookup 文本框可写

如何对 DLOOKUP() 定义的字段启用过滤?

如何将 DLookup 中的值插入表中

Dlookup 无论条件如何,都从列表中返回第一个字段

对 MySql 的 DLookUp 查询