报告索引未正确访问2010年

时间:2015-05-05 17:07:37

标签: sql ms-access ms-access-2010

我在Access 2010中有一个子报表,它根据搜索表单中的条件列出索引中的项目。在这种形式中,用户可以选择要搜索的各种参数(例如项目编号,区域,项目年份等)。

我设置了一个SQL来过滤符合搜索条件的项目。现在,它只适用于项目编号;如果我直接过滤它,它会启动一个项目,否则它会带来每个项目而不管其他搜索参数。

索引必须能够通过ProjNo 按所有其他标准(项目年份,区域,部门,设计师等等)进行过滤。

SELECT * FROM INDEX WHERE INDEX.ProjNo LIKE 
IIF(Forms![SearchForm]![ProjNo]="","*",Forms![SearchForm]![ProjNo])

我不擅长SQL,所以任何建议都会很棒。

2 个答案:

答案 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]

注意INDEXreserved 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)

然后您可以使用它来构建过滤表达式。