将带有数据的查询从父表单中的组合框输入到子表单中的列表框

Posted

技术标签:

【中文标题】将带有数据的查询从父表单中的组合框输入到子表单中的列表框【英文标题】:inputing query with data from combobox in parentform to listbox in subform 【发布时间】:2014-01-17 15:14:06 【问题描述】:

我有一个 ms-access 数据库,它有一个带有两个子表单(subFormB 和 subFormC)的表单 (FormA)。我正在尝试使用 FormA 中的组合框(combo2)的值来获取(从表中)将输入到 subFormB 和 subFormC 中的值。即用户从 combo2 中选择的任何值都将用作过滤器来查询数据库中的表,这些值将输入到 subFormB 或 subFormC 中的列表框中

我的代码在 FormB 上运行良好,但我似乎无法让它在 FormC 上工作

combo2 中显示的值取决于另一个组合框 (combo1) 的值。 如果 combo1 是“员工姓名”,则 combo2 中的值是字符串(姓名),结果输入到 subFormB 如果 combo1 是“项目名称”,则 combo2 中的值是数字(数字),结果输入到 subFormC

下面是我的代码示例

Private Sub Combo2_AfterUpdate()

If Combo1 = "Staff Name" Then     
subFormB.Visible = True
ltemp = "SELECT Staff.department"
ltemp = ltemp & " FROM Staff "
ltemp = ltemp & " WHERE Staff.staff_name = '" & combo2 & "' "
Me!subFormB.Form.List3.RowSource = ltemp


If Combo1 = "Project Number" Then
subFormC.visible = True         
TID = "SELECT Contracts.TargetIssueDate"
TID = TID & " FROM Contracts "
TID = TID & " WHERE Contracts.cms = combo2 "

Me!subFormC.Form.List25.RowSource = TID
End Sub

换句话说,我的代码的第一部分有效,但第二部分(从第二个 if 语句开始)无效。我觉得这是因为在这种情况下 combo2 的值是数字,问题出在查询中,但我不知道如何重写查询以便它可以工作。

【问题讨论】:

【参考方案1】:

在第一个查询中,combo2 包含在 WHERE 子句中。

但是第二个查询包含组合的 name 而不是它的值。也就是说,这就是代码构建的WHERE子句……

WHERE Contracts.cms = combo2 

在这种情况下,我希望 Access 将 combo2 视为参数并要求您为其提供值。但你没有提到这一点,所以可能会发生更多事情。

代码包括...

If Combo1 = "Staff Name" Then 

...但是以后没有关闭End If。也许,您向我们展示了您的实际代码的缩略版本,而实际版本确实包含End If

我将建议一种不同的方法,而不是整理这些细节。制作 db 文件的备份副本。在subFormB 上将此查询用作List3RowSource

SELECT Staff.department
FROM Staff
WHERE Staff.staff_name = Forms!FormA!combo2;

然后,在Combo2_AfterUpdateFormA 中,只需Requery 子表单的列表框,甚至整个子表单,而不是更改列表框RowSource ...这两个之一...

Me!subFormB!List3.Requery 
Me!subFormB.Requery

如果该方法令人满意,则将相同的策略应用于另一个子表单。如果它完全失败,请恢复到您的备份数据库。

【讨论】:

抱歉回复晚了。是的,这是我正在使用的代码的一个非常简略的版本。现在将尝试您的建议

以上是关于将带有数据的查询从父表单中的组合框输入到子表单中的列表框的主要内容,如果未能解决你的问题,请参考以下文章

如何根据用户表单组合框选择查询单元格中的数据并将数据复制到用户表单文本框中

使用单个表单组合框中的多列作为 MS Access 中的查询参数

如何从位于访问中的另一个子窗体中的组合框中过滤子窗体?

打开报表时从表单输入变量

使用宏过滤带有组合框的表单 - MS Access

在MS访问中的子表单上显示查询结果