使用父窗体中的组合框中的数据向子窗体中的列表框输入查询

时间:2014-01-17 15:14:07

标签: sql ms-access access-vba subform

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

我的代码与FormB运行良好,但我似乎无法让它适用于FormC

combo2中显示的值取决于另一个组合框(combo1)的值。
如果combo1是“staff name”,那么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 个答案:

答案 0 :(得分:1)

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

但第二个查询包含组合的名称而不是其值。换句话说,这是由代码构建的WHERE子句......

WHERE Contracts.cms = combo2 

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

代码包括......

If Combo1 = "Staff Name" Then 

...但之后没有关闭End If。也许,您已向我们展示了实际代码的缩写版本,实际版本是否包含End If

我建议采用不同的方法,而不是整理出这些细节。制作db文件的备份副本。将此查询用作RowSourceList3的{​​{1}}。

subFormB

然后,在SELECT Staff.department FROM Staff WHERE Staff.staff_name = Forms!FormA!combo2; 的{​​{1}}中,只需Combo2_AfterUpdate子表单的列表框,甚至整个子表单,而不是更改列表框FormA ...其中一个两个......

Requery

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