0

我有一个搜索页面,它根据指定的标准返回结果,当每个标准为 OR 时,这可以正常工作,但是当我使用 AND 时,它返回错误或没有结果。例如,搜索条件可能是...

A. Author = ""
B. Subject = ""
C. Keyword = ""
D. Dated = ""

代码:

SELECT * 
FROM Table 
WHERE Author = '" & strAuthor & "' 
  AND Subject = '" & strSubject & "' 
  AND Keyword = '" & strKeyword & "' 
  AND Dated = '" & strDated & "' "

这里我只使用了 4 个参数,而实际上还有很多。但是这个例子应该解释这个问题......为了使这项工作我需要更具体,例如“如果 A 和 B”或“B、C 和 D”,但使用任何空白或 NULL 参数都不起作用。

现在我可以使用条件语句来写入标准,例如......

SELECT * 
FROM Table 
WHERE
    if strAuthor <> "" then 
        Author = '" & strAuthor & "'
    end if
    if strSubject <> "" then
        AND Subject = '" & strSubject & "'
    end if

依此类推,除了SELECT像这样编写字符串不起作用之外,只会产生错误,因为选择字符串不能包含其他代码(这是我的发现)。

如果选项只有几个,我可以为每个组合编写单独的选择字符串,但是有超过 10 种不同的标准需要超过 3,628,800 种组合!

有解决方案吗?

4

2 回答 2

0

在这里,您有 2 个选项:

a)创建一个存储过程并为所有列设置一些默认值,如果用户没有传递任何值,查询将使用该列的默认值运行。

b)在前端施加规则以始终为所有列选择一个值。

于 2013-08-20T02:44:53.937 回答
0

使用此代码时不需要存储过程:

SQL = "SELECT * FROM Table WHERE ID <> ''"
    if len(strAuthor) > 3 then 
        SQL = SQL & " AND Author = '" & strAuthor & "'"
    end if
    if len(strSubject) > 3 then 
        SQL = SQL & " AND Subject LIKE '%" + Replace(strSubject, "'", "''") + "%'"
    end if  
    if len(strKeyword) > 3 then 
        SQL = SQL & " AND Description LIKE '%" + Replace(strKeyword, "'", "''") + "%'"
    end if  
    if strCatID <> "" then 
        SQL = SQL & " AND Category = '" & strCatID & "'"
    end if
SQL = SQL & " Order By Subject ASC "

它请求ID的第一行的意义是用作通用占位符,以便所有后续参数都可以以“AND”为前缀。

如果变量为空,则不包括在内,因此仅使用指定的变量。

于 2013-08-20T05:51:41.887 回答