我在Access 2010中有一个子报表,它根据搜索表单中的条件列出索引中的项目。在这种形式中,用户可以选择要搜索的各种参数(例如项目编号,区域,项目年份等)。
我设置了一个SQL来过滤符合搜索条件的项目。现在,它只适用于项目编号;如果我直接过滤它,它会启动一个项目,否则它会带来每个项目而不管其他搜索参数。
索引必须能够通过ProjNo 和按所有其他标准(项目年份,区域,部门,设计师等等)进行过滤。
SELECT * FROM INDEX WHERE INDEX.ProjNo LIKE
IIF(Forms![SearchForm]![ProjNo]="","*",Forms![SearchForm]![ProjNo])
我不擅长SQL,所以任何建议都会很棒。
答案 0 :(得分:1)
你想......
符合所有条件的行。因此,如果他们搜索,例如,区域 和项目年份,它应该带来与两者相匹配的一切。
使用一个WHERE
子句条件指定您想要匹配区域和项目年度的另一个条件。将这两个条件与AND
结合起来。
假设您的 SearchForm 包含一个名为 txtArea 的区域值的文本框,另一个名为 txtProjectYear 的< em>项目年度价值......
SELECT * FROM [INDEX] AS i
WHERE
i.area = Forms![SearchForm]![txtArea]
AND i.[project year] = Forms![SearchForm]![txtProjectYear]
注意INDEX
是reserved word。我在SQL语句中将其括起来,这可以减少问题的可能性。但是,如果是我,我会给表格一个不同的名字。
答案 1 :(得分:0)
请改为尝试:
SELECT * FROM INDEX WHERE INDEX.ProjNo LIKE
IIF(Len(Forms![SearchForm]![ProjNo])>0,Forms![SearchForm]![ProjNo],"*")
当然,您可以在vba&amp;中评估表单的内容。确定是否应该应用过滤器,例如(未经测试)
Dim strProject As String, strQuery as string
If Me.ProjNo.Selected > 0 Then
strProject = Me.ProjNo
Else
strProject = "*"
End If
strQuery = "SELECT * FROM INDEX WHERE INDEX.ProjNo LIKE " & Chr(34) & strProject & Chr(34)
然后您可以使用它来构建过滤表达式。