我有一个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的值是数字,问题来自查询,但我不知道如何重写查询,以便它可以工作。
答案 0 :(得分:1)
在第一个查询中,combo2
子句的值包含在WHERE
子句中。
但第二个查询包含组合的名称而不是其值。换句话说,这是由代码构建的WHERE
子句......
WHERE Contracts.cms = combo2
在这种情况下,我希望Access将combo2
视为参数并要求您为其提供值。但是你没有提到这一点,所以可能会发生更多事情。
代码包括......
If Combo1 = "Staff Name" Then
...但之后没有关闭End If
。也许,您已向我们展示了实际代码的缩写版本,实际版本是否包含End If
?
我建议采用不同的方法,而不是整理出这些细节。制作db文件的备份副本。将此查询用作RowSource
上List3
的{{1}}。
subFormB
然后,在SELECT Staff.department
FROM Staff
WHERE Staff.staff_name = Forms!FormA!combo2;
的{{1}}中,只需Combo2_AfterUpdate
子表单的列表框,甚至整个子表单,而不是更改列表框FormA
...其中一个两个......
Requery
如果该方法令人满意,请将相同的策略应用于其他子表单。如果它完全失败,请恢复到备份数据库。